home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / system / tsx420a.zip / BBS.DOC < prev    next >
Text File  |  1994-11-02  |  601KB  |  12,173 lines

  1.  
  2.  
  3.  
  4.  
  5.                                 T S X  --  B B S
  6.  
  7.  
  8.                         Multi-Line Bulletin Board System
  9.  
  10.  
  11.                                Copyright (c) 1994
  12.                            S&H Computer Systems, Inc.
  13.                              1027 17th Avenue South
  14.                               Nashville, TN 37212
  15.                                   615-327-3670
  16.                             71333.27@compuserve.com
  17.  
  18.  
  19.  
  20.       TSX-BBS  is  a  full  32-bit,  multi-user bulletin board system that
  21.       runs in conjunction with the TSX-32 and TSX-Lite operating  systems.
  22.       TSX-BBS   provides   a   full  featured  multi-user  bulletin  board
  23.       environment complete with file  library,  discussion  forums  (Fido,
  24.       Usenet,  etc.),  real-time  conferencing  (chat),  E-mail,  and file
  25.       upload/download.  TSX-BBS also provides options  for  direct  access
  26.       to Internet using Telnet FTP.
  27.  
  28.       TSX-BBS   requires   the   TSX-32  or  TSX-Lite  operating  systems.
  29.       TSX-Lite requires a 386, 486, or Pentium  computer  system  with  at
  30.       least  8Mb  of  memory  and  15Mb  of  free disk space.  VGA and MDA
  31.       display  adapters  are  supported  along  with  a  variety  of  disk
  32.       adapters.
  33.  
  34.  
  35.  
  36.  
  37.  
  38.                                Table of Contents
  39.  
  40.  
  41.  
  42.       1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  1
  43.         1.1 A Multi-Line System . . . . . . . . . . . . . . . . . . . .  1
  44.         1.2 Super System Capacity . . . . . . . . . . . . . . . . . . .  1
  45.         1.3 Reliable, Non-stop Operation  . . . . . . . . . . . . . . .  2
  46.         1.4 A Sysop's Dream . . . . . . . . . . . . . . . . . . . . . .  2
  47.         1.5 Door Program Support  . . . . . . . . . . . . . . . . . . .  2
  48.         1.6 Flexibility is the Key  . . . . . . . . . . . . . . . . . .  3
  49.         1.7 Use TPL to Extend Your System . . . . . . . . . . . . . . .  4
  50.         1.8 File Libraries  . . . . . . . . . . . . . . . . . . . . . .  4
  51.         1.9 Personal File Workspace . . . . . . . . . . . . . . . . . .  5
  52.         1.10 Newsgroups and Discussion Forums . . . . . . . . . . . . .  5
  53.         1.11 E-mail . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  54.         1.12 Direct Internet Access . . . . . . . . . . . . . . . . . .  6
  55.         1.13 Incoming SLIP connections  . . . . . . . . . . . . . . . .  7
  56.         1.14 On-line "Chat" . . . . . . . . . . . . . . . . . . . . . .  7
  57.         1.15 TSX-BBS System Security  . . . . . . . . . . . . . . . . .  7
  58.         1.16 System Control . . . . . . . . . . . . . . . . . . . . . .  8
  59.  
  60.       2. Installing TSX-BBS . . . . . . . . . . . . . . . . . . . . . .  9
  61.         2.1 Demonstration, Shareware Version of TSX-BBS . . . . . . . .  9
  62.         2.2 TSX-32 System Generation Considerations . . . . . . . . . .  9
  63.           2.2.1 General System Parameters . . . . . . . . . . . . . . . 10
  64.           2.2.2 Serial Line Parameters  . . . . . . . . . . . . . . . . 10
  65.         2.3 Modem Setup . . . . . . . . . . . . . . . . . . . . . . . . 13
  66.         2.4 TSX-BBS Installation  . . . . . . . . . . . . . . . . . . . 15
  67.           2.4.1 Installing a Commercial System  . . . . . . . . . . . . 15
  68.           2.4.2 Installing the Demonstration System . . . . . . . . . . 15
  69.         2.5 TSX-BBS Initialization  . . . . . . . . . . . . . . . . . . 16
  70.           2.5.1 General Setup . . . . . . . . . . . . . . . . . . . . . 16
  71.           2.5.2 User Authorization  . . . . . . . . . . . . . . . . . . 17
  72.           2.5.3 Scheduled Utilities . . . . . . . . . . . . . . . . . . 18
  73.           2.5.4 File Library Setup  . . . . . . . . . . . . . . . . . . 18
  74.             2.5.4.1 File Upload Area  . . . . . . . . . . . . . . . . . 19
  75.           2.5.5 Discussion Forum Initialization . . . . . . . . . . . . 20
  76.           2.5.6 Local Logon . . . . . . . . . . . . . . . . . . . . . . 20
  77.           2.5.7 Menu Customization  . . . . . . . . . . . . . . . . . . 20
  78.  
  79.       3. Color and Substitution Operators . . . . . . . . . . . . . . . 21
  80.         3.1 Color operators . . . . . . . . . . . . . . . . . . . . . . 21
  81.         3.2 Substitution operators  . . . . . . . . . . . . . . . . . . 24
  82.  
  83.       4. Conditional Expressions  . . . . . . . . . . . . . . . . . . . 31
  84.         4.1 Built-in Privileges . . . . . . . . . . . . . . . . . . . . 32
  85.         4.2 Sysop-defined Privileges  . . . . . . . . . . . . . . . . . 33
  86.         4.3 System Variables  . . . . . . . . . . . . . . . . . . . . . 33
  87.         4.4 Conditional Expressions in Menus and Text . . . . . . . . . 35
  88.  
  89.  
  90.  
  91.                                        i
  92.  
  93.       Contents                                                          ii
  94.  
  95.  
  96.       5. Menu Compiler  . . . . . . . . . . . . . . . . . . . . . . . . 37
  97.         5.1 Using the Menu Compiler . . . . . . . . . . . . . . . . . . 37
  98.         5.2 Introductory Example  . . . . . . . . . . . . . . . . . . . 37
  99.         5.3 $name -- Activity name for menu . . . . . . . . . . . . . . 39
  100.         5.4 $hot -- Single character activation . . . . . . . . . . . . 39
  101.         5.5 $prompt -- Prompt string  . . . . . . . . . . . . . . . . . 39
  102.         5.6 $display -- Display text for menu . . . . . . . . . . . . . 39
  103.         5.7 $item -- Action item  . . . . . . . . . . . . . . . . . . . 41
  104.           5.7.1 key -- Character or command . . . . . . . . . . . . . . 41
  105.           5.7.2 if -- Conditional item  . . . . . . . . . . . . . . . . 42
  106.           5.7.3 action -- Menu action . . . . . . . . . . . . . . . . . 42
  107.             5.7.3.1 Combined actions  . . . . . . . . . . . . . . . . . 43
  108.             5.7.3.2 actname -- Set activity name  . . . . . . . . . . . 43
  109.             5.7.3.3 autologoff -- Do count down and then logoff . . . . 43
  110.             5.7.3.4 bbsexit -- Exit from BBS to TSX . . . . . . . . . . 44
  111.             5.7.3.5 brfile -- Browse text file  . . . . . . . . . . . . 44
  112.             5.7.3.6 chathandle -- Change chat handle  . . . . . . . . . 44
  113.             5.7.3.7 chatjoin -- Join a chat group . . . . . . . . . . . 44
  114.             5.7.3.8 chatmake -- Create a chat group . . . . . . . . . . 44
  115.             5.7.3.9 chatuser -- List users in chat  . . . . . . . . . . 44
  116.             5.7.3.10 datesearch -- Search for files by date . . . . . . 45
  117.             5.7.3.11 dirupload -- Upload files to a directory . . . . . 45
  118.             5.7.3.12 dispfile -- Display a file . . . . . . . . . . . . 45
  119.             5.7.3.13 display -- Display a string  . . . . . . . . . . . 46
  120.             5.7.3.14 door -- Run door program . . . . . . . . . . . . . 46
  121.             5.7.3.15 download -- Download a file  . . . . . . . . . . . 47
  122.             5.7.3.16 exit -- Exit from menus  . . . . . . . . . . . . . 47
  123.             5.7.3.17 fallist -- Display file area list  . . . . . . . . 47
  124.             5.7.3.18 falsearch -- Search file descriptions  . . . . . . 47
  125.             5.7.3.19 fdllist -- List files in an FDL  . . . . . . . . . 48
  126.             5.7.3.20 fdlsearch -- Search through file list  . . . . . . 48
  127.             5.7.3.21 fdlupload -- Upload a file . . . . . . . . . . . . 48
  128.             5.7.3.22 fmpmenu -- Display file transfer protocol menu . . 49
  129.             5.7.3.23 fmpset -- Set file transfer protocol . . . . . . . 49
  130.             5.7.3.24 forumcheck -- Check for pending forum messages . . 49
  131.             5.7.3.25 frmalist -- Display alphabetic list of forums  . . 49
  132.             5.7.3.26 frmdownload -- Downloaded selected messages  . . . 50
  133.             5.7.3.27 frmenter -- Enter the forum name hierarchy . . . . 50
  134.             5.7.3.28 frmgetlist -- Download list of forums  . . . . . . 51
  135.             5.7.3.29 frmslist -- Search for list of forums  . . . . . . 51
  136.             5.7.3.30 frmentnum -- Enter a forum by number . . . . . . . 52
  137.             5.7.3.31 frmentname -- Enter a forum by name  . . . . . . . 52
  138.             5.7.3.32 frmprefix -- Enter forum by name with prefix . . . 52
  139.             5.7.3.33 frmqwkman -- Manage QWK forum list . . . . . . . . 52
  140.             5.7.3.34 ftp -- Invoke Internet FTP File Transfer Program . 52
  141.             5.7.3.35 logoff -- Log off the BBS  . . . . . . . . . . . . 53
  142.             5.7.3.36 logwrite -- Write message to BBS log file  . . . . 53
  143.             5.7.3.37 mailabook -- Manage address book . . . . . . . . . 53
  144.             5.7.3.38 mailbrowse -- Browse message base  . . . . . . . . 53
  145.             5.7.3.39 mailcheck -- Check for pending mail messages . . . 53
  146.             5.7.3.40 mailfile -- Manage filing cabinet  . . . . . . . . 54
  147.             5.7.3.41 mailrecv -- Receive messages . . . . . . . . . . . 54
  148.             5.7.3.42 mailsend -- Send a message . . . . . . . . . . . . 54
  149.             5.7.3.43 mailsyn -- Manage synonymous names . . . . . . . . 54
  150.             5.7.3.44 mailsysop -- Send message to sysop . . . . . . . . 55
  151.  
  152.       Contents                                                         iii
  153.  
  154.  
  155.             5.7.3.45 menu -- Call a menu  . . . . . . . . . . . . . . . 55
  156.             5.7.3.46 menujump -- Jump to a menu . . . . . . . . . . . . 55
  157.             5.7.3.47 namesel -- Select files for download by name . . . 56
  158.             5.7.3.48 offcheck -- Confirm and then logoff  . . . . . . . 56
  159.             5.7.3.49 offquiet -- Log off without message  . . . . . . . 56
  160.             5.7.3.50 pagesysop -- Page the sysop  . . . . . . . . . . . 56
  161.             5.7.3.51 pause -- Display a string and pause  . . . . . . . 57
  162.             5.7.3.52 print -- Display a string  . . . . . . . . . . . . 57
  163.             5.7.3.53 pws -- Manage personal file workspace  . . . . . . 57
  164.             5.7.3.54 qwkcfg -- Set QWK configuration options  . . . . . 57
  165.             5.7.3.55 qwkdownload -- Download QWK packet with messages . 57
  166.             5.7.3.56 qwkservices -- Select services . . . . . . . . . . 58
  167.             5.7.3.57 qwkupload -- Upload a QWK packet . . . . . . . . . 58
  168.             5.7.3.58 qwkread -- Read new messages from forums . . . . . 58
  169.             5.7.3.59 return -- Return from menu call  . . . . . . . . . 58
  170.             5.7.3.60 setclass -- Change user class  . . . . . . . . . . 58
  171.             5.7.3.61 tagdl -- Download currently tagged files . . . . . 59
  172.             5.7.3.62 tagedit -- Edit the list of tagged files . . . . . 59
  173.             5.7.3.63 telnet -- Invoke Telnet Internet program . . . . . 59
  174.             5.7.3.64 top -- Return to top level menu  . . . . . . . . . 59
  175.             5.7.3.65 tpr -- Run TPL program . . . . . . . . . . . . . . 59
  176.             5.7.3.66 tsxcmd -- Execute TSX command  . . . . . . . . . . 60
  177.             5.7.3.67 upload -- Upload a file  . . . . . . . . . . . . . 60
  178.             5.7.3.68 useroptions -- Change user options . . . . . . . . 61
  179.             5.7.3.69 vote -- Enter voting system  . . . . . . . . . . . 61
  180.         5.8 $initial -- Initial action item . . . . . . . . . . . . . . 61
  181.  
  182.       6. Logon and Callback Procedures  . . . . . . . . . . . . . . . . 62
  183.         6.1 Logon Procedure . . . . . . . . . . . . . . . . . . . . . . 62
  184.         6.2 Callback Verification . . . . . . . . . . . . . . . . . . . 63
  185.           6.2.1 Setting up Callback Verification  . . . . . . . . . . . 65
  186.           6.2.2 The CALLBACK.DAT File . . . . . . . . . . . . . . . . . 65
  187.             6.2.2.1 STRIP command . . . . . . . . . . . . . . . . . . . 65
  188.             6.2.2.2 DIAL Command  . . . . . . . . . . . . . . . . . . . 66
  189.             6.2.2.3 LDDIAL Command  . . . . . . . . . . . . . . . . . . 66
  190.             6.2.2.4 LOCAL Command . . . . . . . . . . . . . . . . . . . 66
  191.             6.2.2.5 LD Command  . . . . . . . . . . . . . . . . . . . . 67
  192.             6.2.2.6 EXCLUDE Command . . . . . . . . . . . . . . . . . . 67
  193.         6.3 Logon Using a Drop File . . . . . . . . . . . . . . . . . . 68
  194.           6.3.1 Drop File Format  . . . . . . . . . . . . . . . . . . . 68
  195.  
  196.       7. File Library . . . . . . . . . . . . . . . . . . . . . . . . . 71
  197.         7.1 File Categories and File Sets . . . . . . . . . . . . . . . 72
  198.           7.1.1 File Sets . . . . . . . . . . . . . . . . . . . . . . . 72
  199.           7.1.2 File Categories . . . . . . . . . . . . . . . . . . . . 73
  200.           7.1.3 Simple DOS Directories  . . . . . . . . . . . . . . . . 73
  201.         7.2 Creating File Categories and File Sets  . . . . . . . . . . 74
  202.           7.2.1 File category creation  . . . . . . . . . . . . . . . . 74
  203.           7.2.2 File set creation . . . . . . . . . . . . . . . . . . . 75
  204.         7.3 Modifying File Descriptions and Attributes  . . . . . . . . 77
  205.         7.4 Deleting Files, File Sets, and File Categories  . . . . . . 77
  206.         7.5 Moving Files Between File Sets  . . . . . . . . . . . . . . 78
  207.         7.6 Setting up Restricted File Areas  . . . . . . . . . . . . . 78
  208.         7.7 Setting Up File Library Menus . . . . . . . . . . . . . . . 80
  209.         7.8 Search expressions  . . . . . . . . . . . . . . . . . . . . 82
  210.  
  211.       Contents                                                          iv
  212.  
  213.  
  214.         7.9 PCBoard DIR File to FDL File Converter  . . . . . . . . . . 83
  215.         7.10 TBBS DIR File to FDL File Converter  . . . . . . . . . . . 84
  216.  
  217.       8. Personal File Workspace  . . . . . . . . . . . . . . . . . . . 85
  218.         8.1 Temporary and Permanent Workspaces  . . . . . . . . . . . . 85
  219.         8.2 Workspace Size Limits . . . . . . . . . . . . . . . . . . . 86
  220.         8.3 Workspace Directories . . . . . . . . . . . . . . . . . . . 87
  221.         8.4 Personal Workspace Management . . . . . . . . . . . . . . . 87
  222.  
  223.       9. Discussion Forums and Newsgroups . . . . . . . . . . . . . . . 89
  224.         9.1 Introduction  . . . . . . . . . . . . . . . . . . . . . . . 89
  225.         9.2 Batch Addition and Deletion of Messages . . . . . . . . . . 90
  226.         9.3 How to expire messages in forums. . . . . . . . . . . . . . 91
  227.         9.4 Expiring messages; The Sweeper program FSWEEP . . . . . . . 92
  228.           9.4.1 Sweeper command options . . . . . . . . . . . . . . . . 93
  229.           9.4.2 Examples  . . . . . . . . . . . . . . . . . . . . . . . 96
  230.           9.4.3 Scheduling the sweeper  . . . . . . . . . . . . . . . . 96
  231.         9.5 Forum Identification and Naming Conventions . . . . . . . . 96
  232.         9.6 Forum Access Privileges . . . . . . . . . . . . . . . . . . 99
  233.         9.7 Forum Creation and Access Issues  . . . . . . . . . . . .  100
  234.           9.7.1 Restricting the Creation of New Forums  . . . . . . .  101
  235.           9.7.2 Previewing New Forums Before Users  . . . . . . . . .  102
  236.           9.7.3 Example of New Forum Management . . . . . . . . . . .  102
  237.           9.7.4 New Forum Management Using Privilege Inheritance  . .  103
  238.         9.8 The Forum Control Files and User Access Files . . . . . .  103
  239.           9.8.1 Forum Control and Data Files  . . . . . . . . . . . .  104
  240.           9.8.2 The BBS:FTREE.DAT File  . . . . . . . . . . . . . . .  104
  241.           9.8.3 The VFILEx.DAT files  . . . . . . . . . . . . . . . .  104
  242.         9.9 Forum Log Files and the Forum Event Log . . . . . . . . .  105
  243.           9.9.1 FSUMMARY.LOG  . . . . . . . . . . . . . . . . . . . .  105
  244.           9.9.2 FSWEEP.LOG  . . . . . . . . . . . . . . . . . . . . .  106
  245.           9.9.3 FREJECT.LOG . . . . . . . . . . . . . . . . . . . . .  108
  246.           9.9.4 FSTAT.LOG . . . . . . . . . . . . . . . . . . . . . .  108
  247.           9.9.5 FNEW.LOG  . . . . . . . . . . . . . . . . . . . . . .  108
  248.           9.9.6 FERROR.LOG  . . . . . . . . . . . . . . . . . . . . .  109
  249.           9.9.7 The FBATCH event log  . . . . . . . . . . . . . . . .  109
  250.         9.10 Classified Ads . . . . . . . . . . . . . . . . . . . . .  109
  251.           9.10.1 User interface issues  . . . . . . . . . . . . . . .  110
  252.           9.10.2 Specification of Classified Ad Forums to the SYSOP Pr 110
  253.  
  254.       10. Electronic Mail . . . . . . . . . . . . . . . . . . . . . .  112
  255.         10.1 Introduction . . . . . . . . . . . . . . . . . . . . . .  112
  256.         10.2 Message Bases and Routes . . . . . . . . . . . . . . . .  113
  257.         10.3 Scanners and Tossers . . . . . . . . . . . . . . . . . .  114
  258.         10.4 The Mail Sweeper . . . . . . . . . . . . . . . . . . . .  114
  259.         10.5 Managing local mail  . . . . . . . . . . . . . . . . . .  115
  260.         10.6 Filing Cabinet . . . . . . . . . . . . . . . . . . . . .  115
  261.         10.7 Accessing Mail from Menus  . . . . . . . . . . . . . . .  116
  262.  
  263.       11. Censoring Messages  . . . . . . . . . . . . . . . . . . . .  117
  264.         11.1 Word Censoring Facility  . . . . . . . . . . . . . . . .  117
  265.           11.1.1 CENSOR.DAT File  . . . . . . . . . . . . . . . . . .  117
  266.           11.1.2 Censor Control Privilege . . . . . . . . . . . . . .  119
  267.  
  268.       12. Internet Access . . . . . . . . . . . . . . . . . . . . . .  120
  269.  
  270.       Contents                                                           v
  271.  
  272.  
  273.         12.1 FTP -- File Transfer Program . . . . . . . . . . . . . .  121
  274.         12.2 Telnet -- Internet Terminal Session  . . . . . . . . . .  123
  275.         12.3 Internet Mail (SMTP) . . . . . . . . . . . . . . . . . .  123
  276.           12.3.1 Introduction . . . . . . . . . . . . . . . . . . . .  123
  277.           12.3.2 Setting up Internet Mail . . . . . . . . . . . . . .  124
  278.           12.3.3 The Internet Scanner . . . . . . . . . . . . . . . .  124
  279.           12.3.4 The Internet Tosser  . . . . . . . . . . . . . . . .  125
  280.  
  281.       13. Chat  . . . . . . . . . . . . . . . . . . . . . . . . . . .  127
  282.         13.1 Discussion Groups  . . . . . . . . . . . . . . . . . . .  127
  283.         13.2 Chat handles . . . . . . . . . . . . . . . . . . . . . .  127
  284.         13.3 Scrolling  . . . . . . . . . . . . . . . . . . . . . . .  128
  285.         13.4 The chat user interface  . . . . . . . . . . . . . . . .  129
  286.           13.4.1 Changing handle  . . . . . . . . . . . . . . . . . .  129
  287.           13.4.2 User list  . . . . . . . . . . . . . . . . . . . . .  129
  288.           13.4.3 Creating a discussion group  . . . . . . . . . . . .  129
  289.           13.4.4 Joining an existing group  . . . . . . . . . . . . .  130
  290.           13.4.5 Reading and writing chat messages  . . . . . . . . .  130
  291.           13.4.6 Chat commands  . . . . . . . . . . . . . . . . . . .  130
  292.         13.5 Colors . . . . . . . . . . . . . . . . . . . . . . . . .  131
  293.         13.6 The chat server  . . . . . . . . . . . . . . . . . . . .  131
  294.         13.7 Chat menu options  . . . . . . . . . . . . . . . . . . .  131
  295.  
  296.       14. Door Programs . . . . . . . . . . . . . . . . . . . . . . .  133
  297.         14.1 Running Door Programs with TSX-BBS . . . . . . . . . . .  134
  298.         14.2 Terminal I/O from the door program . . . . . . . . . . .  134
  299.         14.3 Drop Files . . . . . . . . . . . . . . . . . . . . . . .  135
  300.         14.4 Setting up Menu Entries to Run Doors . . . . . . . . . .  136
  301.         14.5 Taming Door Programs . . . . . . . . . . . . . . . . . .  138
  302.  
  303.       15. The SYSOP Program . . . . . . . . . . . . . . . . . . . . .  140
  304.         15.1 General Setup  . . . . . . . . . . . . . . . . . . . . .  140
  305.         15.2 User Authorization . . . . . . . . . . . . . . . . . . .  142
  306.           15.2.1 Adding New Users . . . . . . . . . . . . . . . . . .  143
  307.           15.2.2 Modifying Users  . . . . . . . . . . . . . . . . . .  144
  308.           15.2.3 Removing Users . . . . . . . . . . . . . . . . . . .  145
  309.           15.2.4 User Classes and Privileges  . . . . . . . . . . . .  145
  310.         15.3 Scheduling Utilities . . . . . . . . . . . . . . . . . .  148
  311.           15.3.1 Introduction . . . . . . . . . . . . . . . . . . . .  148
  312.           15.3.2 What Can Be Scheduled  . . . . . . . . . . . . . . .  148
  313.           15.3.3 The Schedule Browse Screen . . . . . . . . . . . . .  148
  314.           15.3.4 Modifying an Existing Schedule . . . . . . . . . . .  149
  315.           15.3.5 Adding a New Schedule  . . . . . . . . . . . . . . .  150
  316.           15.3.6 Deleting a Schedule  . . . . . . . . . . . . . . . .  150
  317.         15.4 Color Customization  . . . . . . . . . . . . . . . . . .  151
  318.         15.5 Chat groups  . . . . . . . . . . . . . . . . . . . . . .  153
  319.         15.6 Paging Control . . . . . . . . . . . . . . . . . . . . .  154
  320.         15.7 Handle Control . . . . . . . . . . . . . . . . . . . . .  155
  321.         15.8 Language files . . . . . . . . . . . . . . . . . . . . .  155
  322.           15.8.1 Introduction . . . . . . . . . . . . . . . . . . . .  155
  323.           15.8.2 Creating New Databases . . . . . . . . . . . . . . .  156
  324.           15.8.3 Assigning Languages to Users . . . . . . . . . . . .  156
  325.           15.8.4 Editing Phrase Entries . . . . . . . . . . . . . . .  157
  326.           15.8.5 Mini Menus . . . . . . . . . . . . . . . . . . . . .  158
  327.         15.9 Mail Configuration . . . . . . . . . . . . . . . . . . .  159
  328.  
  329.       Contents                                                          vi
  330.  
  331.  
  332.           15.9.1 Managing message bases . . . . . . . . . . . . . . .  159
  333.           15.9.2 Specifying Fidonet configuration . . . . . . . . . .  160
  334.           15.9.3 Specifying Usenset configuration . . . . . . . . . .  160
  335.         15.10 Discussion Forum Setup and Control  . . . . . . . . . .  160
  336.           15.10.1 Defining the Locations of Forum Control Files . . .  161
  337.           15.10.2 The Hierarchical, Alphabetic, and Search displays .  162
  338.             15.10.2.1 The Hierarchical Display  . . . . . . . . . . .  162
  339.             15.10.2.2 The Alphabetic and Search Displays  . . . . . .  164
  340.           15.10.3 Creating New Forums . . . . . . . . . . . . . . . .  165
  341.           15.10.4 Modifying Forum Privileges and Attributes . . . . .  167
  342.           15.10.5 Deleting a Forum  . . . . . . . . . . . . . . . . .  168
  343.           15.10.6 Erasing All Messages from a Forum . . . . . . . . .  169
  344.           15.10.7 Miscellaneous Forum Functions . . . . . . . . . . .  170
  345.             15.10.7.1 Specifying New Forum Defaults Privileges  . . .  170
  346.             15.10.7.2 Options for Classified Ads  . . . . . . . . . .  171
  347.             15.10.7.3 Log File Options  . . . . . . . . . . . . . . .  171
  348.             15.10.7.4 Displaying the Forum Event Log  . . . . . . . .  171
  349.             15.10.7.5 Reset Log Files and Event Log . . . . . . . . .  171
  350.             15.10.7.6 Creating the User Index Files . . . . . . . . .  171
  351.             15.10.7.7 Exporting a List of the Forum Names . . . . . .  172
  352.             15.10.7.8 Rebuilding the Main Control Files . . . . . . .  172
  353.             15.10.7.9 Resetting All Privileges  . . . . . . . . . . .  172
  354.  
  355.       16. QWK Services  . . . . . . . . . . . . . . . . . . . . . . .  173
  356.         16.1 Sysop Configuration  . . . . . . . . . . . . . . . . . .  173
  357.           16.1.1 Service Files  . . . . . . . . . . . . . . . . . . .  175
  358.         16.2 User Configuration . . . . . . . . . . . . . . . . . . .  175
  359.         16.3 Off-line QWK Configuration . . . . . . . . . . . . . . .  177
  360.         16.4 QWK Download Operation . . . . . . . . . . . . . . . . .  179
  361.         16.5 QWK Menu Actions . . . . . . . . . . . . . . . . . . . .  180
  362.  
  363.       17. TSX-Term  . . . . . . . . . . . . . . . . . . . . . . . . .  181
  364.         17.1 Why get TSX-Term?  . . . . . . . . . . . . . . . . . . .  181
  365.           17.1.1 Licensing  . . . . . . . . . . . . . . . . . . . . .  181
  366.           17.1.2 Background file transfer . . . . . . . . . . . . . .  181
  367.           17.1.3 Full ANSI and color support  . . . . . . . . . . . .  181
  368.           17.1.4 Dialing directory  . . . . . . . . . . . . . . . . .  182
  369.           17.1.5 Compressed data stream . . . . . . . . . . . . . . .  182
  370.           17.1.6 Full integration . . . . . . . . . . . . . . . . . .  182
  371.         17.2 How to distribute TSX-Term . . . . . . . . . . . . . . .  182
  372.         17.3 How to implement support for TSX-Term  . . . . . . . . .  182
  373.         17.4 TSX-Term and file transfer . . . . . . . . . . . . . . .  183
  374.  
  375.       18. Usenet Support  . . . . . . . . . . . . . . . . . . . . . .  184
  376.         18.1 Introduction . . . . . . . . . . . . . . . . . . . . . .  184
  377.         18.2 Programs related to usenet . . . . . . . . . . . . . . .  184
  378.         18.3 Bag file and rnews message format  . . . . . . . . . . .  185
  379.         18.4 Receiving Pagesat data with GETSAT . . . . . . . . . . .  187
  380.           18.4.1 Introduction . . . . . . . . . . . . . . . . . . . .  187
  381.           18.4.2 Input to GETSAT  . . . . . . . . . . . . . . . . . .  187
  382.           18.4.3 Output of GETSAT . . . . . . . . . . . . . . . . . .  187
  383.           18.4.4 The GETSAT event log . . . . . . . . . . . . . . . .  188
  384.         18.5 Unzipping compressed Pagesat files . . . . . . . . . . .  188
  385.         18.6 Tossing incoming mail with BAGTOSS . . . . . . . . . . .  189
  386.         18.7 An example using GETSAT, BAGTOSS, and FSWEEP.  . . . . .  189
  387.  
  388.       Contents                                                         vii
  389.  
  390.  
  391.         18.8 Installing UUCICO  . . . . . . . . . . . . . . . . . . .  190
  392.         18.9 Receiving Usenet mail with UUCICO  . . . . . . . . . . .  191
  393.         18.10 Sending mail with UUCICO  . . . . . . . . . . . . . . .  192
  394.  
  395.       19. Fidonet Support . . . . . . . . . . . . . . . . . . . . . .  193
  396.         19.1 Introduction . . . . . . . . . . . . . . . . . . . . . .  193
  397.         19.2 Getting Fidonet Going  . . . . . . . . . . . . . . . . .  194
  398.         19.3 Seting up the fidonet message base . . . . . . . . . . .  194
  399.         19.4 Specifying fidonet configuration . . . . . . . . . . . .  195
  400.         19.5 The Fidonet Scanner  . . . . . . . . . . . . . . . . . .  196
  401.           19.5.1 Introduction . . . . . . . . . . . . . . . . . . . .  196
  402.           19.5.2 Scheduling the Fidonet Scanner . . . . . . . . . . .  196
  403.           19.5.3 How FIDOSCAN works . . . . . . . . . . . . . . . . .  197
  404.           19.5.4 Fidoscan command options . . . . . . . . . . . . . .  197
  405.         19.6 The Fidonet Tosser . . . . . . . . . . . . . . . . . . .  198
  406.           19.6.1 Introduction . . . . . . . . . . . . . . . . . . . .  198
  407.           19.6.2 Scheduling the Fidonet Tosser  . . . . . . . . . . .  198
  408.           19.6.3 Customizing FIDOTOSS.CMD . . . . . . . . . . . . . .  198
  409.           19.6.4 The FIDOTOSS command . . . . . . . . . . . . . . . .  199
  410.         19.7 Using Frontdoor with TSX-BBS . . . . . . . . . . . . . .  200
  411.  
  412.       20. Scheduled Events  . . . . . . . . . . . . . . . . . . . . .  204
  413.         20.1 The Schedule Server  . . . . . . . . . . . . . . . . . .  204
  414.         20.2 The Mail Sweeper . . . . . . . . . . . . . . . . . . . .  205
  415.         20.3 The Forum Sweeper  . . . . . . . . . . . . . . . . . . .  205
  416.         20.4 The Fidonet Tosser . . . . . . . . . . . . . . . . . . .  206
  417.         20.5 The Fidonet Scanner  . . . . . . . . . . . . . . . . . .  206
  418.         20.6 The Bag File Tosser  . . . . . . . . . . . . . . . . . .  206
  419.         20.7 The Log File Sweeper . . . . . . . . . . . . . . . . . .  207
  420.  
  421.       21. For Further Information . . . . . . . . . . . . . . . . . .  208
  422.  
  423.       Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  209
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.                                    Chapter 1
  431.  
  432.                                   Introduction
  433.  
  434.  
  435.  
  436.  
  437.       TSX-BBS  is  a full multi-line bulletin board system (BBS) that runs
  438.       in conjunction with TSX-32  and  TSX-Lite.   Like  TSX,  TSX-BBS  is
  439.       available  as  a  commercial  product  and  as  a shareware program.
  440.       Since TSX-BBS is a separate product from TSX  and  TSX-Lite,  it  is
  441.       distributed  independently  (although you need TSX-32 or TSX-Lite to
  442.       run TSX-BBS).  The following is a  summary  of  some  of  the  major
  443.       features of TSX-BBS:
  444.  
  445.  
  446.       1.1 A Multi-Line System
  447.  
  448.       Designed  from  the ground up as a multi-line operating environment,
  449.       TSX-BBS can support up to 256  lines  on  a  single  computer.   The
  450.       reason  TSX-BBS  can do this is that it was designed specifically to
  451.       run with TSX and to use the features of the operating system in  the
  452.       most efficient manner possible.
  453.  
  454.       So,  instead  of  a  room  full  of computers, you can have a single
  455.       system running  TSX-BBS  connected  through  an  intelligent  serial
  456.       multiplexer   to   many   modem   lines.    For   medium   to  large
  457.       installations,  this  could  save  thousands  (or   even   tens   of
  458.       thousands)  of  dollars  in  hardware  expenses,  not to mention the
  459.       complexity of maintaining a large networked system.
  460.  
  461.       An advantage of a multi-line TSX-BBS system is that  it  provides  a
  462.       smooth  growth  path.   Many  systems run well for one or two lines,
  463.       but when you grow  you  will  hit  a  barrier  that  necessitates  a
  464.       radical  change.   With  TSX-BBS,  you  can  start  out with a small
  465.       system and grow smoothly to an enormous system.
  466.  
  467.  
  468.       1.2 Super System Capacity
  469.  
  470.       Suppose your dreams are so big that you think  you  will  outgrow  a
  471.       single  computer  no  matter  how efficient the software is.  Relax,
  472.       TSX-BBS will take care of you.  For extremely large  configurations,
  473.       TSX  systems  can be networked together so that you can grow without
  474.       bounds.  With its TCP/IP networking option, you  can  link  multiple
  475.       TSX  systems  together.   Any program on any computer in the network
  476.       can transparently access any file.  Because TSX  networking  uses  a
  477.       peer-to-peer  model,  you  do  not  have to dedicate a computer as a
  478.       "file server".  All computers in the network  can  store  files  and
  479.       run the TSX-BBS system.
  480.  
  481.  
  482.                                        1
  483.  
  484.       Chapter 1. Introduction                                            2
  485.  
  486.  
  487.       1.3 Reliable, Non-stop Operation
  488.  
  489.       If  you  are  running a single-line hobby board it may be acceptable
  490.       to  take  the  system  down   periodically   for   maintenance   and
  491.       improvements.   But, if you are serious about running a professional
  492.       quality board, you  need  a  BBS  system  that  will  run  reliably,
  493.       non-stop, 24-hours a day.  TSX-BBS is such a system.
  494.  
  495.       All  of  the  BBS maintenance functions such as adding and modifying
  496.       user authorizations, reviewing and posting new uploads, and  backing
  497.       up  files  can be done without stopping the BBS or interrupting your
  498.       users.  You can do new program development using the  TPL  language,
  499.       C,  Pascal, or the language of your choice, while the BBS is in full
  500.       operation.   You  can  develop  and  test   menu   changes   without
  501.       interrupting  your  users.   And,  the sysop (or properly authorized
  502.       users) can do development and maintenance from  dial-in  connections
  503.       as well as from the local console.
  504.  
  505.       Routine  operations  such  as  new user registrations are completely
  506.       automatic.  Internet Usenet newsgroups,  Fido  echoes,  and  netmail
  507.       processing  is  automatic with messages being posted in real-time as
  508.       they arrive.   TSX-BBS  can  even  be  configured  to  automatically
  509.       create  new  Fido  and Usenet newsgroups without sysop intervention.
  510.       You can literally take a vacation without most of your  users  being
  511.       aware that your board is unattended.
  512.  
  513.  
  514.       1.4 A Sysop's Dream
  515.  
  516.       With  other  multi-line  BBS  systems,  the computer is dedicated to
  517.       running the BBS software and the sysop must use auxiliary  computers
  518.       for  tasks  such  as  viewing  uploaded  GIF  files,  running "door"
  519.       programs, and processing incoming satellite feeds.
  520.  
  521.       TSX-BBS is the only multi-line BBS system that lets  the  sysop  run
  522.       DOS  programs,  view GIF's, do file maintenance, and run games while
  523.       the BBS is live on the same PC.  The same computer that  is  running
  524.       TSX-BBS  can  process incoming satellite data including Usenet feeds
  525.       and add it to your board in  real-time.   Since  most  DOS  programs
  526.       such  as WordPerfect, dBase, Foxpro, CSHOW, Procomm, and Windows 3.1
  527.       run under TSX with the BBS in operation, you can run  your  business
  528.       on the same computer and at the same time that you run your BBS.
  529.  
  530.       Using  the  HOST  program  that  is  provided  with TSX, or your own
  531.       favorite communications program, you  can  call  other  systems  and
  532.       upload  and  download  files  while  your BBS is running on the same
  533.       computer.
  534.  
  535.  
  536.       1.5 Door Program Support
  537.  
  538.       "Door" programs are applications  designed  to  run  in  cooperation
  539.       with  a  BBS  to  provide  extended services such as games.  Because
  540.       traditional multi-line BBS systems dedicate the computer to  running
  541.       the   BBS   software,  they  are  unable  to  execute  popular  door
  542.  
  543.       Chapter 1. Introduction                                            3
  544.  
  545.  
  546.       applications.   TSX-BBS,  on  the  other  hand,  can  execute   door
  547.       programs  on  the  same  computer with the BBS.  And, many users can
  548.       run doors at the same time.  TSX-BBS takes care of  the  details  of
  549.       creating   a  DOOR.SYS  "drop"  file  with  user  information.   TSX
  550.       includes an internal, optimized "FOSSIL"  communication  driver  for
  551.       efficient operation of door programs.
  552.  
  553.       See Chapter 14 for a full discussion of door program support.
  554.  
  555.  
  556.       1.6 Flexibility is the Key
  557.  
  558.       Successful  computer  bulletin  boards  evolve  over  time.  As your
  559.       system grows and you acquire new users and add more lines, you  will
  560.       develop  new  ideas  for  improvements  and  new  features.   It  is
  561.       important  that  you  select  a  BBS  package  that  allows  you  to
  562.       customize  your  system  and doesn't box you in with fixed menus and
  563.       no way of adding extensions.
  564.  
  565.       TSX-BBS comes with a complete set of menus and support  programs  so
  566.       it  is  easy  to get up and running the same day you receive it, but
  567.       it doesn't hold  you  back  when  you  are  ready  to  do  your  own
  568.       development  and  customization.   Virtually every menu, phrase, and
  569.       color can be changed.   Some  sysops  like  very  flamboyant  menus,
  570.       others  prefer  more reserved ones; have it your way.  With a little
  571.       creative effort you can configure TSX-BBS  to  present  exactly  the
  572.       image  you  desire.   And,  you will find that this customization is
  573.       surprisingly easy; we give you the tools and materials, you can  put
  574.       them together in many different ways.
  575.  
  576.       TSX-BBS  comes  with  an  advanced  menu compiler that allows you to
  577.       modify any of the standard menus and create new menus  of  your  own
  578.       design.   You can change the menu tree structure, change the wording
  579.       of menu options,  translate  them  to  foreign  languages,  add  and
  580.       remove menu items, and integrate text from ANSI and RIP editors.
  581.  
  582.       See Chapter 5 for a full discussion of menu design.
  583.  
  584.       For  the  finest  level  of customization you can change the phrases
  585.       and colors presented by each "building block" menu action.  This  is
  586.       especially  useful  for  creating bulletin boards to serve users who
  587.       prefer a language other than English.
  588.  
  589.       Don't let your users down.  You can enhance and upgrade your  system
  590.       while  it  is  running continuously, 24-hours a day.  You can create
  591.       your own test menus while  your  users  continue  to  run  with  the
  592.       production  menus.  When you are ready, you can add the new menus to
  593.       the  production  system  without  taking  the  BBS  down   or   even
  594.       interrupting  on-line  users.   You  can  even  configure TSX-BBS to
  595.       present experimental menus and features on  selected  lines  or  for
  596.       selected users only.
  597.  
  598.       Chapter 1. Introduction                                            4
  599.  
  600.  
  601.       1.7 Use TPL to Extend Your System
  602.  
  603.       The  optional  TSX  Programming Language (TPL) is the ideal tool for
  604.       writing extensions to TSX-BBS.  You can also use TPL for  developing
  605.       your  own  application programs.  Using TPL, you can develop plug-in
  606.       enhancements to your BBS that are a seamless  part  of  the  system.
  607.       If  you  are  so inclined, you can use TPL to develop extensions and
  608.       commercial applications that can be marketed  in  source  or  object
  609.       language form to other TSX-BBS sites.
  610.  
  611.       TPL  is  a  powerful programming language with a C-like syntax.  TPL
  612.       includes integer, real, and string  variables  and  constants.   The
  613.       string  variables  are especially powerful because they have dynamic
  614.       size so you never have to reserve  a  fixed  size  area  to  hold  a
  615.       value.   You  can also write string functions that accept and return
  616.       strings of varying sizes.
  617.  
  618.       The TPL language  includes  over  300  built-in  library  functions.
  619.       Many  of these functions perform BBS operations such as adding files
  620.       to the BBS file libraries or getting  information  about  registered
  621.       BBS  users.  It is easy to write TPL programs to add new files using
  622.       the FILE_ID.DIZ descriptions  so  that  you  do  not  have  to  type
  623.       multi-line  descriptions.   You  can  also  write  TPL  programs  to
  624.       produce reports such as a list of  the  most  frequently  downloaded
  625.       files,  or  a  list  of  users whose accounts will expire during the
  626.       next month.
  627.  
  628.       A  communication  "script"  facility  is  integrated  into  the  TPL
  629.       language.   You  can  write  TPL  programs  that dial other bulletin
  630.       boards, check for new files, download files, and add  them  to  your
  631.       BBS  file  library;  this can be done while your BBS is in operation
  632.       and without intervention on your part.   Because  the  communication
  633.       script  facility is an integral part of the TPL language, all of the
  634.       other  language  features  are  available  such  as  dynamic  string
  635.       variables,  functions, file I/O, and X/Y/Z-modem transfers.  You can
  636.       schedule scripts (and other TPL programs) to run at specified  times
  637.       of the day.
  638.  
  639.  
  640.       1.8 File Libraries
  641.  
  642.       A  good  file library facility is important for most bulletin boards
  643.       and is the primary reason for existence for many.  TSX-BBS  provides
  644.       a  world  class  file  library.   You  can set up any number of file
  645.       areas and organize them in  hierarchical  categories  (CD-ROMs,  IBM
  646.       files,  Macintosh,  etc.).   File descriptions can be up to 16 lines
  647.       long  and  TSX-BBS  stores  extended  information  about  each  file
  648.       including  the  date  and time when it was uploaded, the name of the
  649.       person who uploaded the file, the number of times that the file  was
  650.       downloaded,  and  the date of the last download.  Users can download
  651.       files one at a time or they can tag files while  browsing  and  then
  652.       download  them  as a group.  Daily download byte and time limits can
  653.       be set for each user.
  654.  
  655.       Chapter 1. Introduction                                            5
  656.  
  657.  
  658.       TSX-BBS includes a powerful file search facility.  Users can  search
  659.       file  names  and  descriptions  for single words or for words joined
  660.       with the logical operators 'AND' and 'OR'.   For  example,  a  valid
  661.       search  expression is "GAMES AND WINDOWS", or "HIV OR AIDS".  A date
  662.       search allows users to find files uploaded since the last time  they
  663.       checked  or  since  a  specified date and time.  The search can span
  664.       all file areas or can be restricted to specified areas.
  665.  
  666.       The sysop can set up a private upload area for all user  uploads  so
  667.       that the files can be examined before being publicly posted.
  668.  
  669.       It  is  easy  to  set  up  private file areas for groups of users or
  670.       companies that may want to use your board as a support center.
  671.  
  672.       See Chapter 7, starting  on  page  71,  for  additional  information
  673.       about the file library.
  674.  
  675.  
  676.       1.9 Personal File Workspace
  677.  
  678.       In  addition  to  file  libraries,  the sysop may authorize users to
  679.       store files in a "personal  file  workspace".   This  is  a  private
  680.       directory  for  the  user's  personal  use.  It is also possible for
  681.       several users to  share  the  same  workspace.   Each  user  can  be
  682.       disallowed  from  using  a  workspace, authorized to use a temporary
  683.       workspace which is deleted when the user logs  off,  or  allowed  to
  684.       have  a permanent workspace.  The sysop may place limits on the size
  685.       of each user's personal file workspace
  686.  
  687.       See Chapter 8, starting  on  page  85,  for  additional  information
  688.       about personal file workspaces.
  689.  
  690.  
  691.       1.10 Newsgroups and Discussion Forums
  692.  
  693.       TSX-BBS  includes  a  powerful  message storage and retrieval system
  694.       that is ideal for Usenet newsgroups, Fido echoes and other types  of
  695.       discussion  forums.   The  message  system can efficiently store and
  696.       recall messages from thousands of message areas making it ideal  for
  697.       major  Usenet  storage  sites.   The  maximum number of messages and
  698.       message areas is limited only  by  available  disk  space.   Message
  699.       text  compression  is  performed  automatically to reduce disk space
  700.       requirements.
  701.  
  702.       Messages are organized in a hierarchical (tree-structured)  fashion.
  703.       The  top  level can have categories such as Usenet and Fido.  Within
  704.       the Usenet group there might be  subcategories  such  as  "alt"  and
  705.       "comp".     Within    usenet.alt    you    would   find   additional
  706.       subsub-categories, etc.  Users can explore the areas  by  moving  up
  707.       and  down  through  the  hierarchical levels or by browsing the full
  708.       set of forums as  an  alphabetical  list.   By  using  sophisticated
  709.       indexing   techniques,   TSX-BBS   is   able  to  provide  virtually
  710.       instantaneous access to any message area.  Users can locate  message
  711.       areas  by doing searches for words in the area name.  Users also can
  712.  
  713.       Chapter 1. Introduction                                            6
  714.  
  715.  
  716.       search for messages containing specified words  and  expressions  in
  717.       the body of the message.
  718.  
  719.       Within  an  area,  messages  are  sorted  by  their  creation  date.
  720.       Messages on the same topic are  grouped  into  "threads"  making  it
  721.       easy  to follow an exchange of messages.  TSX-BBS keeps track of the
  722.       last message read in each area so that users  can  easily  read  new
  723.       messages  in  forums  with  many  messages.  Reading messages in one
  724.       area does not affect the last-message-read pointer for other areas.
  725.  
  726.       A "privilege  expression"  can  be  associated  with  each  area  to
  727.       control  which users can access the area.  This makes it easy to set
  728.       up adult discussion forums and to create private forums  for  groups
  729.       that  are  using  the  board  as  a  message exchange system.  Forum
  730.       access restrictions are especially useful for  Usenet  which  has  a
  731.       number   of   newsgroups   which   are   not  suitable  for  general
  732.       distribution.
  733.  
  734.       A  QWK  facility  is  built  into  TSX-BBS  to   provide   efficient
  735.       downloading of messages for off-line readers.
  736.  
  737.       There  are  "tosser" programs available to process incoming Fido and
  738.       Usenet messages.  At the option of  the  sysop,  new  message  areas
  739.       (categories)  can  be  created  automatically  by  the  tosser  when
  740.       messages arrive for areas that did not previously exist.  The  sysop
  741.       can  block  all  automatic  area  creation or can enable it only for
  742.       subcategories of selected areas.
  743.  
  744.       See Chapter 9, starting  on  page  89,  for  additional  information
  745.       about discussion forums.
  746.  
  747.  
  748.       1.11 E-mail
  749.  
  750.       TSX-BBS  includes  a  powerful  electronic mail (e-mail) system that
  751.       allows users to send messages to each other.   They  can  also  send
  752.       and  receive  SMTP  (Simple Mail Transfer Protocol) messages through
  753.       the Internet and they can send and receive Fido netmail messages.
  754.  
  755.  
  756.       1.12 Direct Internet Access
  757.  
  758.       In addition to Internet mail and Usenet newsgroups,  TSX-BBS  offers
  759.       direct,  interactive  access  to  the Internet using FTP and Telnet.
  760.       The File Transfer  Protocol  (FTP)  program  allows  you  to  browse
  761.       through  files  on  other computers connected to the Internet.  Once
  762.       you have found a file of interest,  FTP  transfers  the  file  to  a
  763.       "personal  file workspace" directory on the TSX-BBS system.  You can
  764.       then use X/Y/Z-Modem to download the  file  from  the  TSX-BBS  work
  765.       area to the local computer.
  766.  
  767.       Telnet  is  a terminal emulator program that you can use to log onto
  768.       another computer connected to Internet.  With Telnet you can  be  an
  769.       interactive user on computers around the world.
  770.  
  771.       Chapter 1. Introduction                                            7
  772.  
  773.  
  774.       If  you  authorize  it,  users  can also access your BBS through the
  775.       Internet by  using  Telnet.   They  run  Telnet  on  their  personal
  776.       computers  and  specify  your BBS address as the host address.  They
  777.       then log on just like dial-in users and  have  full  access  to  the
  778.       BBS.
  779.  
  780.       FTP  and  Telnet  run as "native" programs on the same computer that
  781.       is running TSX-BBS.  There is no need to buy a  separate,  dedicated
  782.       Internet  server  computer.   You  can  provide your users with full
  783.       Internet access and do it all with a single computer system.
  784.  
  785.       See Chapter 12, starting on page  120,  for  additional  information
  786.       about Internet access.
  787.  
  788.  
  789.       1.13 Incoming SLIP connections
  790.  
  791.       If  you  have  an  Internet  connection,  you  can  resell  Internet
  792.       connections to your users.  Your users can call your  BBS,  log  on,
  793.       and  then  shift  their  connection  from ASCII to SLIP (Serial Line
  794.       Interconnect Protocol).  They are then  connected  to  the  Internet
  795.       through  your BBS and they can run programs such as FTP, Telnet, and
  796.       Mosaic on their local computers to access  sites  on  the  Internet.
  797.       You  can  limit  which  users are authorized for SLIP access and the
  798.       BBS daily time limits apply to SLIP connections.
  799.  
  800.  
  801.       1.14 On-line "Chat"
  802.  
  803.       A popular multi-line BBS feature is real-time conferencing,  "Chat".
  804.       Chat  allows  users to set up round-table conferences where they can
  805.       carry on multi-party discussions in real-time.  TSX-BBS chat  allows
  806.       the  sysop  to  create permanent discussion topics; users can create
  807.       temporary chat areas that are deleted automatically  when  the  last
  808.       user  leaves  the  area.  The chat system features split screen mode
  809.       which allows users to view the ongoing conversation while  composing
  810.       their own contributions.
  811.  
  812.       See  Chapter  13,  starting  on page 127, for additional information
  813.       about the chat system.
  814.  
  815.  
  816.       1.15 TSX-BBS System Security
  817.  
  818.       TSX-BBS allows the sysop to set many privilege and limit values  for
  819.       each  user.  Controls such as daily time limit, download file limit,
  820.       and use of individual system functions such  as  the  file  library,
  821.       E-mail,  chat,  QWK,  etc.  may be set for each individual user.  To
  822.       simplify management, the sysop may also define user "classes"  which
  823.       describe  sets  of  limits  and  privileges.   A  class  can then be
  824.       assigned  to  a  user,  changing  each  of  the  users  limits   and
  825.       privileges to those of the class.
  826.  
  827.       The  TSX-BBS user privilege system is simple but extremely powerful.
  828.       Each user is assigned a "security  level"  that  ranges  from  0  to
  829.  
  830.       Chapter 1. Introduction                                            8
  831.  
  832.  
  833.       65535.   In  addition,  there  are  80 sysop-defined privilege flags
  834.       that may be turned on or off.  The meaning for each  privilege  flag
  835.       may  be  assigned  by the sysop.  The privilege flags can be used in
  836.       privilege expressions  along  with  the  security  level  and  other
  837.       conditional  tests  such  as  the  date, time, day of the week, etc.
  838.       TSX-BBS privilege expressions can  include  multiple  logical  items
  839.       with  'AND' and 'OR' logical operators and parentheses for grouping.
  840.       For example, the following privilege expression is true for  a  user
  841.       who  has  a  security  level  equal  to  or  greater  than 50 or has
  842.       privilege  flag  1  enabled:  "(PRIVLEV>=50||P1)".   The   following
  843.       privilege  expression  is  true  only on Saturday: "(DAYOFWEEK==7)".
  844.       See Chapter 4 for a full discussion of privilege expressions.
  845.  
  846.       In addition to the security level and  privilege  flags,  the  sysop
  847.       can  also assign a "group" number to users.  This can be used to set
  848.       up private file and message areas accessible only to members of  the
  849.       group.   This is extremely useful for commercial BBS operations that
  850.       provide support areas for various companies or organizations.
  851.  
  852.       See Chapter 4, starting  on  page  31,  for  additional  information
  853.       about security control.
  854.  
  855.  
  856.       1.16 System Control
  857.  
  858.       TSX-BBS  comes  with  a  "SYSOP" program that provides comprehensive
  859.       control over your system.  With  the  "dashboard"  display  you  can
  860.       monitor  which  lines  are  in use, what users are on-line, and what
  861.       activities are taking place.  The  sysop  can  also  "spy"  on  user
  862.       sessions.   Real-time  statistics  displayed  include  the number of
  863.       logons, new user  authorizations,  files  uploaded  and  downloaded,
  864.       messages  sent  and  received,  door  programs executed, and overall
  865.       system loading.  See Chapter 15 for a full discussion of  the  SYSOP
  866.       program.
  867.  
  868.       The  sysop can examine and modify user authorization entries, change
  869.       privileges  and  examine  usage  statistics  while  the  system   is
  870.       running.   Statistics  kept  for  each  user include the date of the
  871.       user's  first  and  last  logons,  the  total  connect  time,  bytes
  872.       uploaded  and  downloaded,  and  information about the current day's
  873.       usage.  Log  files  can  be  enabled  to  record  even  more  detail
  874.       including the date and time of each file upload and download.
  875.  
  876.       The  sysop  can  examine and edit file descriptions and monitor file
  877.       download counts.  A cut-and-paste clipboard makes it  easy  to  move
  878.       files  from one file area to another.  All of this can be done while
  879.       the system is in full operation.
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.                                    Chapter 2
  887.  
  888.                                Installing TSX-BBS
  889.  
  890.  
  891.  
  892.  
  893.  
  894.       2.1 Demonstration, Shareware Version of TSX-BBS
  895.  
  896.       TSX-BBS is a commercial  product  developed  and  supported  by  S&H
  897.       Computer   Systems,   Inc.    However,  there  is  a  demonstration,
  898.       shareware version of TSX-BBS  that  may  be  freely  copied,  passed
  899.       around,  and  posted  on  bulletin boards.  The shareware version is
  900.       intended for demonstration purposes only.  The shareware version  is
  901.       limited  in  that  it provides only the basic BBS operations such as
  902.       file  libraries,  discussion  forums,  e-mail,  etc.   It  does  not
  903.       provide   any   of   the   optional   components  such  as  Internet
  904.       connectivity, Fido, and chat.  The TPL programming language is  also
  905.       not  available with the shareware version.  The shareware version of
  906.       TSX-BBS prints a message when each user logs on notifying  the  user
  907.       that the TSX-BBS system is an unregistered, demonstration version.
  908.  
  909.       The  shareware  version  of  TSX-BBS  is  intended  to  be used with
  910.       TSX-Lite, the shareware version of the TSX-32 operating system.   If
  911.       you  have  obtained  a  shareware copy of TSX-BBS you must also find
  912.       and install a copy of TSX-Lite.   The  current  version  of  TSX-BBS
  913.       requires  TSX-Lite  version  4.20  or later.  The TSX-Lite files are
  914.       named TSX420A.ZIP, TSX420B.ZIP, TSX420C.ZIP  and  TSX420D.ZIP.   The
  915.       demonstration  version  of  TSX-BBS  can  also be used with a TSX-32
  916.       system.
  917.  
  918.       Note: the latest copies of the shareware  versions  of  TSX-BBS  and
  919.       TSX-Lite   can   always  be  obtained  from  the  S&H  Support  BBS:
  920.       615-320-1820.  You can also download the complete TSX-BBS  reference
  921.       manual  and  the  TPL programming language manual as well as example
  922.       programs and shareware add-ons.
  923.  
  924.  
  925.       2.2 TSX-32 System Generation Considerations
  926.  
  927.       The first step in installing a TSX-BBS  system  is  to  install  the
  928.       underlying  TSX-32  or TSX-Lite operating system.  With TSX-Lite you
  929.       are restricted to running  a  maximum  of  two  simultaneous  users.
  930.       With  TSX-32  you  are  limited  only  by  licensing and performance
  931.       considerations.
  932.  
  933.       To install TSX-32, you should follow the instructions in the  TSX-32
  934.       Installation  and  System  Generation  Manual.   The  procedure  for
  935.       installing TSX-Lite is described in  the  documentation  that  comes
  936.  
  937.  
  938.                                        9
  939.  
  940.       Chapter 2. Installing TSX-BBS                                     10
  941.  
  942.  
  943.       with  it.   Since the installation procedure is thoroughly described
  944.       there it will not be repeated here.
  945.  
  946.       There are a few TSX system generation parameters that  must  be  set
  947.       appropriately  to  enable  optimal performance of TSX-BBS.  They are
  948.       described in the following sections.
  949.  
  950.       2.2.1 General System Parameters
  951.  
  952.       The TSX system  generation  parameters  described  in  this  section
  953.       affect  overall  operation.   To  set  them you should run the TSGEN
  954.       program  under  TSX  by  changing  to  the  TSX   system   directory
  955.       (\tsx32sys) and issuing the following command:
  956.  
  957.            TSGEN
  958.  
  959.       If  your  system generation configuration file has the default name,
  960.       TSX32.GEN, press Enter when asked for the  name  of  the  GEN  file.
  961.       You  will then be presented with a menu from which you should select
  962.       the "Set Tuning Parameters" option by typing 'S'.  You  should  then
  963.       be  presented with a menu whose top item is "All parameters".  Press
  964.       Enter to select this item.  You will now be presented  with  a  long
  965.       list  of system generation parameters.  You may press the arrow keys
  966.       and Page-up/Page-down to scroll through  the  list.   You  may  also
  967.       type  a  letter  to  reposition  the  display to the first parameter
  968.       beginning with the letter you type.  To change an item, position  to
  969.       it  and  press  Enter.   Press  ESC to return to this menu after you
  970.       have set the parameter.
  971.  
  972.       Set each of the following system generation parameters:
  973.  
  974.       DOBBS -- Set to 1.  This parameter tells TSX that  TSX-BBS  will  be
  975.           running  and  causes  the  start-up system initialization job to
  976.           execute a batch file  named  "SY:STARTBBS.CMD"  which  initiates
  977.           detached jobs needed by the execution of the BBS.
  978.  
  979.       DOTSXTERM  --  Set  to  1  if  any  of  your users will be using the
  980.           TSX-Term communications program to connect to TSX-BBS.   Setting
  981.           this  parameter  to  0 disables TSX-Term support and saves about
  982.           40k  bytes  of  space  in  the  kernel.   See  Chapter  17   for
  983.           additional information about TSX-Term.
  984.  
  985.       NEWTEMPFILES  --  Set  to 1.  This allows creation of new files with
  986.           the same names as existing file that are  currently  open.   The
  987.           superseded files are replaced when they are closed.
  988.  
  989.       ZMODEM  --  Set  to 1.  This enables support for X-, Y-, and Z-modem
  990.           protocols.
  991.  
  992.       2.2.2 Serial Line Parameters
  993.  
  994.       Once you finish changing the general system  parameters,  press  ESC
  995.       repeatedly  until  you return to the first TSGEN menu that gives you
  996.       the choices "Set Tuning Parameters"  and  "Manage  equipment  List".
  997.       Press  'M'  to  select  "Manage  Equipment  List".  You will then be
  998.  
  999.       Chapter 2. Installing TSX-BBS                                     11
  1000.  
  1001.  
  1002.       presented with a list of each  device  known  by  TSX.   The  device
  1003.       names  on this menu have a two letter device type code (for example,
  1004.       "TT" for terminal lines, and "DH" for fixed disks) and a  controller
  1005.       letter.   Device  name "TTA" is normally the console terminal, "TTB"
  1006.       is COM port 1, and "TTC" is COM port 2.  If you  have  genned  in  a
  1007.       serial  multiplexer  it will have a name of the form "TTx" where 'x'
  1008.       is the controller letter you specified.
  1009.  
  1010.       You should use the arrow keys to highlight the entry for the  serial
  1011.       device  whose  lines you wish to set and then type 'U' to select the
  1012.       unit control menu.  This menu will display  a  list  of  the  serial
  1013.       lines  attached to the hardware controller.  There will be one entry
  1014.       in the case of COM ports and more than one  entry  in  the  case  of
  1015.       serial  multiplexers.   To  change  the parameters for an individual
  1016.       unit, use the arrow keys to highlight the  selected  unit  and  type
  1017.       'U'  to select "Unit settings".  You will then be presented with the
  1018.       first of set of screens with parameters that  can  be  set  for  the
  1019.       unit.   Use the arrow keys and Page-up/Page-down keys to position to
  1020.       entries to be changed.  You should set the following parameters:
  1021.  
  1022.       SPEED --  Press  Enter  and  a  list  of  available  baud  rates  is
  1023.           displayed.   Highlight  the  speed you desire and press Enter to
  1024.           select it.  If you are using a "smart" modem that  has  a  fixed
  1025.           rate  of communication to the computer, you should set that rate
  1026.           as the default speed.  If you are using 14.4k  baud  modems  the
  1027.           recommended  line  speed  is 19.2k.  If you are using 28.8k baud
  1028.           modems the recommended line speed is 38.4k baud.
  1029.  
  1030.       TERMTYPE -- Press Enter and you will be presented  with  a  list  of
  1031.           terminal  types.   Highlight the desired terminal type and press
  1032.           Enter to select it.  Here is a summary of some of  the  terminal
  1033.           types:
  1034.  
  1035.           ANSI  -- Terminals or terminal emulator programs that handle the
  1036.               basic ANSI control sequences.  This is the  best  choice  if
  1037.               the  system  is  being  accessed  using  a terminal emulator
  1038.               program such as Procomm  or  Telix.   This  is  the  default
  1039.               TSX-Lite  terminal  type.   This is the recommended terminal
  1040.               type for TSX-BBS lines.
  1041.  
  1042.           VT100 -- Digital Equipment Corporation  (DEC)  VT-100  terminal.
  1043.               Many   terminal  emulator  programs  provide  VT-100  as  an
  1044.               option.  If  you  select  this  terminal  type  and  "trash"
  1045.               characters  appear  on  the  screen  after  typing  the  CLS
  1046.               command or after a session window switch, you should  select
  1047.               ANSI terminal type.
  1048.  
  1049.           PCTERM  -- Serial PC-Term Terminals.  These are serial terminals
  1050.               that have IBM compatible keyboards and  transmit  make/break
  1051.               keyboard  codes like the console keyboard.  They can display
  1052.               25 lines and support the IBM display character set.
  1053.  
  1054.           TSXTERM -- Terminal Emulator.   The  TSXTERM  terminal  emulator
  1055.               program,  which is provided with TSX, can be run on a remote
  1056.               computer that is  connected  to  your  TSX-Lite  system  via
  1057.  
  1058.       Chapter 2. Installing TSX-BBS                                     12
  1059.  
  1060.  
  1061.               either  a  hardwired  serial connection or a modem.  This is
  1062.               the best type of TSX workstation.  See Chapter 17,  starting
  1063.               on page 181, for additional information about TSXTERM.
  1064.  
  1065.       PARITY  -- The standard setting for TSX is 8-bits, no parity.  Press
  1066.           Enter and you will be presented with a choice of even,  odd,  or
  1067.           no parity.
  1068.  
  1069.       PHONE -- Set this entry to 'Y' for lines connected to modems.
  1070.  
  1071.       AUTOBAUD -- set this parameter to 'N'.
  1072.  
  1073.       START  --  Set  this  item  to  'Y'  to  cause  the  line  to  start
  1074.           automatically when a connection is established.
  1075.  
  1076.       SYSPASSWORD -- If you set this field to 'Y' users will  be  prompted
  1077.           with  the  string  specified  by  the SYSPASSPR sysgen parameter
  1078.           (default is '!') and they must  enter  a  password  string  that
  1079.           matches  that  specified  by  the  SYSPASSWORD sysgen parameter.
  1080.           The recommended setting is 'N' unless you  need  the  additional
  1081.           system security.
  1082.  
  1083.       LOGON  --  If  this  unit is being used only as an I/O device (e.g.,
  1084.           serial mouse, modem for dial-out calls, etc.) set this field  to
  1085.           'N'  to  prevent  users  from  logging  onto the line.  Set this
  1086.           parameter to 'Y' for normal dial-in type lines.
  1087.  
  1088.       CMDFILE -- You may specify the device,  directory,  and  name  of  a
  1089.           command  file  to  be executed each time this line logs on.  The
  1090.           default start-up  command  file  is  SY:START.CMD.   You  should
  1091.           specify  SY:BBS.CMD  for  lines  that  are  to start the TSX-BBS
  1092.           system automatically when a connection is established.
  1093.  
  1094.       HANDSHAKING -- Select RTSCTS for the standard  hardware  handshaking
  1095.           used  by  most  modern  high-speed modems.  Select XONXON if XON
  1096.           (control-Q, DC1) and XOFF (control-S, DC3) characters  are  used
  1097.           for  software  flow  control.  If you are using a 14.4k or 28.8k
  1098.           modem  you  will  almost  certainly  want   to   select   RTSCTS
  1099.           handshaking.
  1100.  
  1101.       BOARDHS  --  Set  to  'Y'  to enable hardware controller handshaking
  1102.           mode for high-speed modems.
  1103.  
  1104.       ORINGSIZE -- Set to 3600 (or larger) for BBS lines.
  1105.  
  1106.       FIXEDSPEED -- Setting this option to 'Y'  causes  TSX  to  lock  the
  1107.           speed  of  the  line  to the speed set during system generation.
  1108.           If the option is set to 'N' then programs can  change  the  line
  1109.           speed.
  1110.  
  1111.       MRESET  --  You  may  specify a modem reset string to be sent to the
  1112.           line whenever a user logs off or a program releases  control  of
  1113.           the  line.   To  enter  control characters in the string specify
  1114.           the caret character ('^') in front of the letter.  For  example,
  1115.           "^M" means control-M which is carriage return.
  1116.  
  1117.       Chapter 2. Installing TSX-BBS                                     13
  1118.  
  1119.  
  1120.       Press  ESC  to exit from the unit parameter screens after you change
  1121.       the desired settings.  Press ESC  three  more  times  to  exit  from
  1122.       TSGEN.   The  parameter settings are written to the TSX32.SYS kernel
  1123.       file and are recorded in the TSX32.GEN system  generation  parameter
  1124.       file.   You  must  reboot your computer and restart TSX to make them
  1125.       take effect.
  1126.  
  1127.  
  1128.       2.3 Modem Setup
  1129.  
  1130.       Note: In discussing modems, several terms come  up  frequently  that
  1131.       you  should  understand.   The  term "DTE" (Data Terminal Equipment)
  1132.       refers to a computer (or a serial terminal).  The term  "DCE"  (Data
  1133.       Communications Equipment) refers to a modem.
  1134.  
  1135.       Modems  are  controlled  using a set of commands that begin with the
  1136.       sequence "AT".  For example, "ATDT" begins touch-tone dialing.   The
  1137.       "basic"  commands  such  as  ATDT,  ATH,  ATQ,  and  ATE  seem to be
  1138.       standard across all brands  of  modern  modems.   Advanced  commands
  1139.       usually   begin  with  "AT&"  or  "AT%".   These  commands  are  not
  1140.       standardized across all brands of modems.  In this  manual  we  will
  1141.       give  examples  based  on the Hayes command set, you should refer to
  1142.       your modem manual for the equivalent command.
  1143.  
  1144.       The TSX serial port that a modem is connected to should be set to  a
  1145.       baud  rate  higher  than the actual communications rate.  You should
  1146.       do this using TSGEN as described  in  Section  2.2.2.   If  you  are
  1147.       using  a  14400  baud  modem,  the serial port rate should be set to
  1148.       19200; for 28800 baud modems, the serial port rate should be set  to
  1149.       38400.   Once  the  TSX port speed has been correctly set you should
  1150.       use the TSX "HOST" command to  cross-connect  to  the  serial  line.
  1151.       For  example, to connect to a modem on COM port 1, which corresponds
  1152.       to the TSX device name TTB0:, use the command:
  1153.  
  1154.            HOST TTB0:
  1155.  
  1156.       Make sure your modem is in echo mode by typing the command  "ATQ0E1"
  1157.       which  should  cause  the  modem  to  echo  "OK".   You can now type
  1158.       commands to the modem.  Note:  to  exit  the  HOST  connection  type
  1159.       control-backslash followed by 'X'.
  1160.  
  1161.       Modems  should  be configured to communicate with the TSX-BBS system
  1162.       at a fixed baud rate.  For most modems this is done by sending  them
  1163.       the  command  "&B1"  (this  would be typed "AT&B1" because all modem
  1164.       commands begin with "AT").
  1165.  
  1166.       Note: In a computer-to-computer connection there are actually  three
  1167.       baud rates involved:
  1168.  
  1169.       1.  The speed between the TSX-BBS computer and its modem.
  1170.  
  1171.       2.  The "link" speed between the two modems.
  1172.  
  1173.       3.  The speed between the modem and the user's computer.
  1174.  
  1175.       Chapter 2. Installing TSX-BBS                                     14
  1176.  
  1177.  
  1178.              Computer      Modem           Modem     Computer
  1179.                (DTE) <---> (DCE) <-------> (DCE) <---> (DTE)
  1180.  
  1181.       TSX-BBS  works  best  if  you can configure your modem to report the
  1182.       link speed (the speed between the two modems).
  1183.  
  1184.       Next, the modem should be set  to  perform  hardware  flow  control.
  1185.       This  causes  the modem and TSX to use the Request to Send (RTS) and
  1186.       Clear to Send (CTS) control signals to coordinate flow control.   If
  1187.       you  modem  uses  Hayes  compatible commands, the mode command to do
  1188.       this is "&H1".
  1189.  
  1190.       The modem should also be set to  return  verbal  result  codes.   In
  1191.       this  mode  the  modem  will  send  a string to TSX such as "CONNECT
  1192.       14400" when a connection is  made.   If  your  modem  uses  a  Hayes
  1193.       compatible  command  set,  this  can be done using the modem command
  1194.       "&A3".  If you have a choice, set your  modem  to  report  the  link
  1195.       connection  rate (i.e., the speed that the two modems are talking to
  1196.       each other) rather than the speed with which the  modem  is  talking
  1197.       to TSX.
  1198.  
  1199.       The  modem  should  be set to report the "true state" of the Carrier
  1200.       Detect (CD) signal.  Carrier detect is asserted when  the  modem  is
  1201.       receiving  a  good  signal from another modem.  Some modems set this
  1202.       with a DIP switch, others use the command "&C1".  For  proper  modem
  1203.       control  by  TSX-BBS, it is essential that your modem report whether
  1204.       the carrier detect signal is actually  being  received  rather  than
  1205.       always  reporting that carrier is detected which is the default case
  1206.       for some modems.
  1207.  
  1208.       The modem should be set to hang up  when  the  Data  Terminal  Ready
  1209.       (DTR)  signal  is dropped.  Most commonly, the command to do this is
  1210.       "&D2".
  1211.  
  1212.       Once you have issued these commands to the modem,  you  should  save
  1213.       the  settings in nonvolatile random access memory (NVRAM) by issuing
  1214.       the modem command "&W".  Note: in addition to  making  the  settings
  1215.       permanent,  the  "&W"  command also causes the modem to use the baud
  1216.       rate in effect when the command was issued each time it receives  an
  1217.       incoming  call.   Note:  some  modems use an S-register to determine
  1218.       the communication speed for incoming calls.
  1219.  
  1220.       You can exit from  the  HOST  command  by  typing  control-backslash
  1221.       followed by 'X'.
  1222.  
  1223.       Chapter 2. Installing TSX-BBS                                     15
  1224.  
  1225.  
  1226.       2.4 TSX-BBS Installation
  1227.  
  1228.       2.4.1 Installing a Commercial System
  1229.  
  1230.       If  you purchased a TSX-BBS system you will have received a diskette
  1231.       labeled "TSX-BBS".  To install  TSX-BBS  first  boot  to  DOS,  then
  1232.       insert the diskette in your 'A' or 'B' drive and type:
  1233.  
  1234.            x:INSTALL
  1235.  
  1236.       where 'x' is 'A' or 'B' depending on the drive you are using.
  1237.  
  1238.       The  installation  procedure will ask you to provide the name of the
  1239.       directory where the TSX-BBS files should be installed;  the  default
  1240.       name  is  "C:\TSXBBS\".   Two  subdirectories are created under this
  1241.       directory.  Their names are "BIN" and "DATA".  The BIN  subdirectory
  1242.       contains  the  executable  programs  for  TSX-BBS  and  other system
  1243.       files.  The DATA subdirectory  contains  site-dependent  data  files
  1244.       and log files.
  1245.  
  1246.       After  you enter the requested information, the TSX-BBS installation
  1247.       procedure will decompress the files on the diskette and  create  the
  1248.       directories.   Once the installation procedure is completed you must
  1249.       run MINIGEN to regenerate TSX and then you  must  start  TSX  before
  1250.       you can run the BBS.
  1251.  
  1252.       2.4.2 Installing the Demonstration System
  1253.  
  1254.       The  shareware, demonstration version of TSX-BBS is distributed as a
  1255.       ZIP archive with the name  TSXBBSnn.ZIP  where  nn  is  the  version
  1256.       number.
  1257.  
  1258.       To  install  the  demonstration  version,  boot  to DOS and create a
  1259.       temporary directory  and  select  that  directory  as  your  current
  1260.       directory;   then   decompress  the  ZIP  file  into  the  temporary
  1261.       directory.  Next, type INSTALL  to  execute  the  BAT  file  in  the
  1262.       temporary directory.
  1263.  
  1264.       The  installation  procedure will ask you to provide the name of the
  1265.       directory where the TSX-BBS files should be installed;  the  default
  1266.       name  is  "C:\TSXBBS\".   Two  subdirectories are created under this
  1267.       directory.  Their names are "BIN" and "DATA".  The BIN  subdirectory
  1268.       contains  the  executable  programs  for  TSX-BBS  and  other system
  1269.       files.  The DATA subdirectory  contains  site-dependent  data  files
  1270.       and log files.
  1271.  
  1272.       After  you enter the requested information, the TSX-BBS installation
  1273.       procedure will decompress the files on the diskette and  create  the
  1274.       directories.   Once the installation procedure is completed you must
  1275.       run MINIGEN to regenerate TSX and then you  must  start  TSX  before
  1276.       you can run the BBS.
  1277.  
  1278.       Chapter 2. Installing TSX-BBS                                     16
  1279.  
  1280.  
  1281.       2.5 TSX-BBS Initialization
  1282.  
  1283.       After  installing  TSX-BBS  and  making the necessary changes to the
  1284.       TSX operating system, you must start TSX before you can run  TSX-BBS
  1285.       because  TSX-BBS  can  run  only  under  TSX,  not DOS.  Once TSX is
  1286.       running you are ready to start the TSX-BBS SYSOP program to  perform
  1287.       some BBS initialization.
  1288.  
  1289.       The  SYSOP  program is fully documented in Chapter 15.  This section
  1290.       is intended to provide the minimum information  needed  to  get  you
  1291.       started.
  1292.  
  1293.       TSX-BBS  needs  two  file  directories  which are created during the
  1294.       installation process: one stores  the  executable  programs,  menus,
  1295.       language  phrase file, and other system files.  The second directory
  1296.       holds site-dependent files such as your  configuration  information,
  1297.       file  library  descriptions,  and  log  files created by various BBS
  1298.       utility programs.
  1299.  
  1300.       TSX-32 allows  the  use  of  "logical  device  names"  to  assign  a
  1301.       physical  device  and  directory  to  a  logical  name.  Unlike DOS,
  1302.       TSX-32 logical device names can be more  than  one  character  long.
  1303.       TSX-BBS  assigns  the  logical name "BBSBIN:" to the BBS system file
  1304.       directory and "BBS:" to  the  site-dependent  data  file  directory.
  1305.       The    default    directory    names    are   "C:\TSXBBS\BIN\"   and
  1306.       "C:\TSXBBS\DATA" but you may select different  names  if  you  wish.
  1307.       The  installation procedure creates a TSX-32 command procedure (like
  1308.       a DOS batch file) named BBSASN.CMD in the  TSX-32  system  directory
  1309.       (\TSX32SYS)  which  contains  ASSIGN commands for the BBS and BBSBIN
  1310.       logical names.  If for some  reason  you  need  to  change  the  BBS
  1311.       directories, you could edit this file.
  1312.  
  1313.       Start the SYSOP program by typing the command:
  1314.  
  1315.            SYSOP
  1316.  
  1317.       2.5.1 General Setup
  1318.  
  1319.       From  the  main  menu type 'G' to select "General Setup".  Enter the
  1320.       following items of information:
  1321.  
  1322.       BBS name -- The name of your BBS as you want it  displayed  to  your
  1323.           users.
  1324.  
  1325.       Location -- The location of your BBS.
  1326.  
  1327.       Phone number -- The primary dial-in phone number of your BBS.
  1328.  
  1329.       QWK  ID  --  This  string  is  used  to  name packets downloaded and
  1330.           uploaded during QWK message transfers.  Normally it should  have
  1331.           a name related to your BBS name.
  1332.  
  1333.       Sysop  name  --  The name of the primary sysop should be entered for
  1334.           "Sysop 1 name".  If there are  co-sysops,  their  names  may  be
  1335.           entered for "Sysop 2 name" and "Sysop 3 name".
  1336.  
  1337.       Chapter 2. Installing TSX-BBS                                     17
  1338.  
  1339.  
  1340.       Inactivity  limit  --  If a user remains inactive for this number of
  1341.           minutes, he or she will be logged off.  You may  specify  0  for
  1342.           this  parameter  if you do not want to impose an inactivity time
  1343.           limit.
  1344.  
  1345.       Callback verification -- Specify 'Y' if you want  the  BBS  to  call
  1346.           new  users  to  verify  that  they  have  entered  correct phone
  1347.           numbers.  See Section 6.2 on page 63 for additional  information
  1348.           about the callback procedure.
  1349.  
  1350.       Date  format  -- You may select three different formats for printing
  1351.           dates:
  1352.  
  1353.           0 = mm/dd/yy
  1354.  
  1355.           1 = dd/mm/yy
  1356.  
  1357.           2 = yy.mm.dd
  1358.  
  1359.       Temp directory -- This is the  name  of  the  device  and  directory
  1360.           where  the  BBS  will  create  temporary  files  for  users.   A
  1361.           subdirectory for each BBS line is created  under  the  BBS  root
  1362.           directory that you specify.
  1363.  
  1364.       Time  zone -- Specify your time zone name.  For example, "CST" would
  1365.           be specified for Central Standard Time.
  1366.  
  1367.       Once you fill in the General Setup screen, press ESC  to  return  to
  1368.       the main menu.
  1369.  
  1370.       2.5.2 User Authorization
  1371.  
  1372.       The  next  thing  that you should do is authorize yourself to access
  1373.       the BBS.  From  the  main  SYSOP  menu  type  'U'  to  select  "User
  1374.       Authorization".   The  next  screen  will  be  a  list of authorized
  1375.       users; initially this list will be empty.
  1376.  
  1377.       The 'U' to select "User classes".  A "class" is a set of  privileges
  1378.       and  limits  that  can  be used to "stamp" a user entry.  Initially,
  1379.       there should be classes defined for "BASIC", "VERIFIED",  "EXPIRED",
  1380.       and   "SYSOP".    See  Section  15.2.4  starting  on  page  145  for
  1381.       additional information about classes.  Some  classes  have  specific
  1382.       uses  as  described  in  Chapter 6.  You can define your own classes
  1383.       and change the limits and privileges  associated  with  the  default
  1384.       classes.
  1385.  
  1386.       To  examine  the  limits and privileges associated with a class, use
  1387.       the arrow keys to select  a  class  and  press  Enter.   You  should
  1388.       examine  the  default  classes  and  make any changes that you wish.
  1389.       Once you have finished examining and modifying  classes,  press  ESC
  1390.       to return to the "Users" list.
  1391.  
  1392.       Next,  type  'A' to select "Add user".  Create an entry for yourself
  1393.       using  the   arrow   keys   to   move   between   fields   and   the
  1394.       page-up/page-down  keys to move between the pages of the entry.  You
  1395.  
  1396.       Chapter 2. Installing TSX-BBS                                     18
  1397.  
  1398.  
  1399.       can press  F1  to  get  help  about  the  field  you  are  currently
  1400.       positioned  to.  You can leave the limit and privilege entries blank
  1401.       at this time.
  1402.  
  1403.       When you are finished creating your entry, press ESC  to  return  to
  1404.       the  "Users"  list.   Now, use the arrow keys to highlight the entry
  1405.       you have created and press 'C' to select "Class".  A pull down  menu
  1406.       will  appear  with a list of all defined classes.  Use the arrow key
  1407.       to select the "SYSOP" entry and press Enter.  This will  assign  the
  1408.       privileges  and limits associated with the selected class (SYSOP) to
  1409.       the selected user.  If you wish, you can examine the user  entry  to
  1410.       see the values that have been assigned.
  1411.  
  1412.       See  Section  15.2  starting  on page 142 for additional information
  1413.       about authorizing users.
  1414.  
  1415.       2.5.3 Scheduled Utilities
  1416.  
  1417.       From the main SYSOP menu type 'S' to  select  "Schedule  Utilities".
  1418.       The  first  time  you  enter the "Schedule Utilities" menu the SYSOP
  1419.       program creates a control file with a list of  the  default  utility
  1420.       programs.   You  will  see  a  list  of the scheduled utilities.  To
  1421.       examine information about a utility program, use the arrow  keys  to
  1422.       highlight  an  entry  in the list and press Enter.  The first screen
  1423.       displays general  information  about  the  utility  program.   Press
  1424.       Page-down  to  advance to the screens that list the times of the day
  1425.       when  the  utility  program  will  be  run.   See  Chapter  20   for
  1426.       additional information about scheduled utility programs.
  1427.  
  1428.       2.5.4 File Library Setup
  1429.  
  1430.       Assuming  you  want to have a file library, you will need to use the
  1431.       SYSOP program to set  up  some  file  sets.   Extensive  information
  1432.       about  the file library is presented in Chapter 7; this section will
  1433.       take you through the process of creating an example file set.
  1434.  
  1435.       From the SYSOP main menu type 'F' to  select  "File  library".   The
  1436.       screen  displayed  will  be  a list of defined file areas; initially
  1437.       this list will be blank.  Type 'F' to select "File set  create".   A
  1438.       "file  set"  is  a collection of files corresponding to a single DOS
  1439.       directory.  Typically, files of a  similar  nature  such  as  games,
  1440.       utilities, swimsuit GIFs, etc.  are grouped into a file set.
  1441.  
  1442.       Specify  a  title  for the file set as you want it presented to your
  1443.       users.   For  example,  you  might  specify  something   like   "DOS
  1444.       Utilities", or "Windows games".
  1445.  
  1446.       The   "FDL  file"  is  the  name  of  the  file  that  contains  the
  1447.       descriptions of files for this file set.   Specify  a  name  of  the
  1448.       form  "BBS:name.FDL"  where  "name" is a valid 1 to 8 character file
  1449.       name.
  1450.  
  1451.       The "Directory" entry is the name of the device  and  DOS  directory
  1452.       where  files for this file set will be stored.  This is the location
  1453.  
  1454.       Chapter 2. Installing TSX-BBS                                     19
  1455.  
  1456.  
  1457.       of the actual files that comprise the  file  set.   Specify  a  full
  1458.       DOS-style directory specification such as "C:\BBS\GAMES\".
  1459.  
  1460.       The   "Access",   "Download",  and  "Upload"  fields  are  used  for
  1461.       privilege expressions that control which users can access  the  file
  1462.       area.    See   Chapter   4  for  a  full  description  of  privilege
  1463.       expressions.  If you leave the "Access" and "Download" fields  blank
  1464.       then  any  user can download from the file set.  If you specify "NO"
  1465.       for the "Upload" field then users will be disallowed from  uploading
  1466.       to the file set.
  1467.  
  1468.       The  "Area#"  field  controls  the  order in which the file sets are
  1469.       displayed to the user.  If you leave this field blank the  file  set
  1470.       is added to the end of the list.
  1471.  
  1472.       The  "Free download" field controls whether downloads from this file
  1473.       set count against the user's time and byte limits.  Specify  'Y'  if
  1474.       you want users to be able to download without limits.
  1475.  
  1476.       The  "Copy  on  download" field should be set to 'Y' for CD ROM file
  1477.       sets.  It causes TSX-BBS to copy the file to a  temporary  directory
  1478.       before  starting  the download.  Set this field to 'N' for file sets
  1479.       stored on normal hard disks.
  1480.  
  1481.       The "CD ROM media" field should be set to 'Y' if, and only  if,  the
  1482.       file set is stored on a CD ROM drive.
  1483.  
  1484.       After  you  have fill in the screen, press ESC to return to the list
  1485.       of file areas.  The area you defined should  now  be  in  the  list.
  1486.       Repeat this process for any other file sets you wish to define.
  1487.  
  1488.       2.5.4.1 File Upload Area
  1489.  
  1490.       You  should create at least one file set into which users can upload
  1491.       files.  When defining this file set,  it  is  recommended  that  you
  1492.       specify  "BBS:UPLOADS.FDL" for the "FDL file" name because this name
  1493.       is used in the standard FILE.MNU file menu that is distributed.   If
  1494.       you  want this file area to be accessible only to the sysop, specify
  1495.       "P14"  for  the  "Access"  and  "Download"  privilege   expressions.
  1496.       Specify  "YES"  for  the  "Upload"  privilege  so that all users can
  1497.       upload to this area.
  1498.  
  1499.       If you examine the FILE.MNU file menu that  is  provided  with  your
  1500.       TSX-BBS  distribution,  you  will  see  that,  by  default,  the 'U'
  1501.       (upload) action is defined as follows:
  1502.  
  1503.            $item key=U action=felupload(bbs:master,bbs:uploads)
  1504.  
  1505.       which  causes  uploads  to  go  to  the  file   set   described   by
  1506.       BBS:UPLOADS.FDL.
  1507.  
  1508.       Chapter 2. Installing TSX-BBS                                     20
  1509.  
  1510.  
  1511.       2.5.5 Discussion Forum Initialization
  1512.  
  1513.       Fido  and  Usenet  discussion  forums  are  created  and initialized
  1514.       automatically by the appropriate "tosser" programs  so  you  do  not
  1515.       need  to  worry  about them now.  If you want to set up a classified
  1516.       ad forum you should read Section 9.10 starting on page 109.
  1517.  
  1518.       2.5.6 Local Logon
  1519.  
  1520.       Once you have completed the BBS setup, and have authorized  yourself
  1521.       with  sysop  privilege,  you  can  do a local logon by typing "BBS".
  1522.       This invokes the BBS.CMD procedure  in  the  TSX  system  directory.
  1523.       You can then log on and experiment with the BBS.
  1524.  
  1525.       To  avoid  having  to  type  in your name each time you want to do a
  1526.       local  logon,  edit  the  file   "BBSBIN:SYSBBS.CMD"   and   replace
  1527.       "first_name"  and  "last_name"  with your first and last names.  You
  1528.       can then do a local logon by typing SYSBBS without having  to  enter
  1529.       your name to logon.
  1530.  
  1531.       2.5.7 Menu Customization
  1532.  
  1533.       TSX-BBS  comes  with  a set of menu files so that you can get up and
  1534.       running without  having  to  learn  how  to  create  TSX-BBS  menus.
  1535.       However,  eventually  you  will  probably  want to custom tailor the
  1536.       menus to your needs.  Chapter 5 describes how to create  and  modify
  1537.       menus.   Section  15.4  on  page  151  describes  how to change menu
  1538.       colors.
  1539.  
  1540.       The main menu is in a file named BBS.MNU which is stored in the  BBS
  1541.       system  directory.  You may want to study it.  You will note that it
  1542.       uses the "action=menu(name)" command to invoke  submenus.   You  can
  1543.       determine  the  names  of  the  various  submenus by examining these
  1544.       commands in BBS.MNU.
  1545.  
  1546.       As you modify the menu files it is best if you  move  your  modified
  1547.       copies  over  to  the site-specific data directory so that your menu
  1548.       files will not be overwritten when you  install  a  new  version  of
  1549.       TSX-BBS.   When  you  do this you must modify the higher-level menus
  1550.       and change the commands to the form "action=menu(BBS:name)" to  tell
  1551.       the  BBS  system  to look in the "BBS:" directory rather than in the
  1552.       "BBSBIN:" directory.   If  you  want  to  move  the  main  BBS  menu
  1553.       (BBS.MNU)  to a different directory, you must modify the BBS.TPL and
  1554.       LOGON.TPL programs to specify the name of the main menu.
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.                                    Chapter 3
  1562.  
  1563.                         Color and Substitution Operators
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.       3.1 Color operators
  1570.  
  1571.       A color operator may be  inserted  in  menu  entries  and  in  other
  1572.       display  text to cause TSX-BBS to insert the ANSI escape sequence to
  1573.       select a particular  color  for  the  text  that  follows.   If  the
  1574.       current  user  does  not  have ANSI support enabled, or has selected
  1575.       no-color mode, the color operator is ignored.  The form of  a  color
  1576.       operator  is  "@Xbf"  where  'b' is a hexadecimal digit that selects
  1577.       the background color and 'f' is a  hexadecimal  digit  that  selects
  1578.       the  foreground  (character)  color.  The 'X' character that follows
  1579.       the '@' character may be written in  either  upper  or  lower  case.
  1580.       The  hexadecimal  color  values  are  in the range 0 to 9 or A to F;
  1581.       letters may be written in upper or  lower  case.   You  must  always
  1582.       specify  both  the  foreground  and background color letters so that
  1583.       the entire operator string is exactly 4 characters long.  Note  that
  1584.       there is no '@' character at the end of the operator.
  1585.  
  1586.       The following is a list of valid background color codes:
  1587.  
  1588.            * BACKGROUND COLOR CODES *
  1589.            Value  Attribute    Color
  1590.            -----  ---------   -------
  1591.              0    Normal      Black
  1592.              1    Normal      Blue
  1593.              2    Normal      Green
  1594.              3    Normal      Cyan
  1595.              4    Normal      Red
  1596.              5    Normal      Magenta
  1597.              6    Normal      Brown
  1598.              7    Normal      White
  1599.              8    Blinking    Black
  1600.              9    Blinking    Blue
  1601.              A    Blinking    Green
  1602.              B    Blinking    Cyan
  1603.              C    Blinking    Red
  1604.              D    Blinking    Magenta
  1605.              E    Blinking    Yellow
  1606.              F    Blinking    White
  1607.  
  1608.       The following is a list of the valid foreground color codes:
  1609.  
  1610.  
  1611.  
  1612.  
  1613.                                        21
  1614.  
  1615.       Chapter 3. Color and Substitution Operators                       22
  1616.  
  1617.  
  1618.            * FOREGROUND COLOR CODES *
  1619.            Value  Attribute    Color
  1620.            -----  ---------   -------
  1621.              0    Normal      Black
  1622.              1    Normal      Blue
  1623.              2    Normal      Green
  1624.              3    Normal      Cyan
  1625.              4    Normal      Red
  1626.              5    Normal      Magenta
  1627.              6    Normal      Brown
  1628.              7    Normal      White
  1629.              8    Bright      Black
  1630.              9    Bright      Blue
  1631.              A    Bright      Green
  1632.              B    Bright      Cyan
  1633.              C    Bright      Red
  1634.              D    Bright      Magenta
  1635.              E    Bright      Yellow
  1636.              F    Bright      White
  1637.  
  1638.       For  example,  the  following  line shows how the operators might be
  1639.       used to set the colors of various words:
  1640.  
  1641.            @X01Blue on black @XCFBlinking white on red.
  1642.  
  1643.       In addition to using the "@Xbf" color operator you may  also  select
  1644.       colors  by using a substitution operator of the form "@color(name)@"
  1645.       where name is a name that  identifies  the  type  of  color  wanted.
  1646.       When  using this method you do not select a specific color like blue
  1647.       on white, rather you select a type of color that can  be  controlled
  1648.       by  the SYSOP program.  For example, if you specify @color(heading)@
  1649.       the following text will be displayed with the color that  the  sysop
  1650.       has  selected  for  headings.   Similarly, @color(base)@ selects the
  1651.       base color.  The following is a list of the color type names:
  1652.  
  1653.       Chapter 3. Color and Substitution Operators                       23
  1654.  
  1655.  
  1656.               Name       Color Type
  1657.            ----------    -------------------------------------------
  1658.            BASE          Base color
  1659.            BRBRKT        Browse list brackets
  1660.            BRNUMBER      Browse list numbers
  1661.            BRTAG         Browse list tag marker
  1662.            BRTEXT        Text in browse lists
  1663.            CHATLABELS    Chat: labels for full screen
  1664.            CHATPEOPLE    Chat: input from people
  1665.            CHATSERVER    Chat: messages from server
  1666.            EDSELECT      Editor: text selected for copying
  1667.            FLDATE        File dates in file lists
  1668.            FLNAME        File names in file lists
  1669.            FLSIZE        File sizes in lists
  1670.            HEADING       Header color
  1671.            HOTKEY        Hot keys
  1672.            HOTBRKT       Brackets around hot characters
  1673.            INFO          Information items (such as extra file info)
  1674.            MENUBOX       Color for menu title box lines
  1675.            MENUTITLE     Color for text for menu title
  1676.            PRESSKEY      Press any key to continue
  1677.            UINPUT        User input
  1678.  
  1679.       Chapter 3. Color and Substitution Operators                       24
  1680.  
  1681.  
  1682.       3.2 Substitution operators
  1683.  
  1684.       You may use "substitution operators" in menu entries  and  in  other
  1685.       display   text   to   cause  TSX-BBS  to  insert  certain  items  of
  1686.       information.  A substitution operator has the  form  "@word@"  where
  1687.       'word'  is  a  word  that  denotes what item of information is to be
  1688.       substituted.  For example, the @date@ substitution  operator  causes
  1689.       the  current  date to be inserted in the form "mm/dd/yy" and @first@
  1690.       causes the user's first name to be inserted.  So,  for  example  the
  1691.       line
  1692.  
  1693.            Hello @first@.  Today's date is @date@.
  1694.  
  1695.       might be expanded to produce the line
  1696.  
  1697.            Hello Phil.  Today's date is 06/08/94.
  1698.  
  1699.       A  few of the substitution operators accept argument values enclosed
  1700.       in  parentheses.   For  example  the   operator   @pos(line,column)@
  1701.       generates  the  ANSI  escape  sequence to position the cursor to the
  1702.       indicated location.  If there is more than  one  argument,  separate
  1703.       them  with  commas.  If the argument is a string, you may enclose it
  1704.       in quote marks.  You must use quote marks if the string  contains  a
  1705.       close parenthesis or comma character.
  1706.  
  1707.       The following is a list of the valid substitution operators.
  1708.  
  1709.       @baudrate@  --  Inserts  the  baudrate  that  the  current  user  is
  1710.           connected  at.   The  value  inserted   is   the   actual   data
  1711.           communications  speed  between  the  BBS  and the caller's modem
  1712.           such  as  14400,  2400,  etc.   This  value  is  determined   by
  1713.           examining  the  "CONNECT  nnnnn"  message returned by your modem
  1714.           when the connection is established.   If  your  modem  does  not
  1715.           send  in  a connection speed message, then the value returned is
  1716.           the speed of the line between your computer's COM port  and  the
  1717.           modem rather than the modem-to-modem speed.
  1718.  
  1719.       @bbs@ -- Name of the bulletin board.
  1720.  
  1721.       @beep@ -- Causes the bell to be rung.
  1722.  
  1723.       @class@ -- Substitutes the user's privilege class name.
  1724.  
  1725.       @clreol@  --  Generates  the  ANSI  escape  sequence  to  clear  the
  1726.           remainder of the line.  Ignored if the user does not  have  ANSI
  1727.           capabilities.
  1728.  
  1729.       @cls@  --  Generates  the  ANSI escape sequence to clear the screen.
  1730.           Generates  three  line  feeds  the  user  does  not  have   ANSI
  1731.           capabilities.
  1732.  
  1733.       @color(name)@  --  Select  a color type.  See page 22 for additional
  1734.           information about this operator.
  1735.  
  1736.       Chapter 3. Color and Substitution Operators                       25
  1737.  
  1738.  
  1739.       @date@ -- Inserts the current date in the form mm/dd/yy.
  1740.  
  1741.       @dateformat(format)@ -- Inserts the current date and/or  time  in  a
  1742.           format  that  you  specify.   The  'format' argument is a string
  1743.           that determines in which form  the  date-time  value  is  to  be
  1744.           inserted.  The following formatting codes may be specified:
  1745.  
  1746.           %a -- Abbreviated weekday name.
  1747.  
  1748.           %A -- Full weekday name.
  1749.  
  1750.           %b -- Abbreviated month name.
  1751.  
  1752.           %B -- Full month name.
  1753.  
  1754.           %c -- mmm dd hh:mm:ss yyyy.
  1755.  
  1756.           %d -- Day of the month.
  1757.  
  1758.           %e -- mm/dd/yy.
  1759.  
  1760.           %E -- mm/dd/yy hh:mm.
  1761.  
  1762.           %f -- mm/dd/yy dd/mm/yy yy.mm.dd
  1763.  
  1764.           %F -- mm/dd/yy hh:mm or dd/mm/yy hh:mm
  1765.  
  1766.           %H -- Hour of the 24 hour day.
  1767.  
  1768.           %h -- hh:mm.
  1769.  
  1770.           %I -- Hour of the 12 hour day.
  1771.  
  1772.           %j -- Julian day number.
  1773.  
  1774.           %m -- Month of the year.
  1775.  
  1776.           %M -- Minutes after the hour.
  1777.  
  1778.           %p -- AM/PM indicator.
  1779.  
  1780.           %Q -- mm-dd-yyyy hh:mm:ss.
  1781.  
  1782.           %S -- Seconds after the minute.
  1783.  
  1784.           %t -- Thousands of a second.
  1785.  
  1786.           %w -- Weekday number, 1 for Sunday.
  1787.  
  1788.           %x -- mmm d, yyyy.
  1789.  
  1790.           %X -- hh:mm:ss.
  1791.  
  1792.           %y -- Year of the century.
  1793.  
  1794.       Chapter 3. Color and Substitution Operators                       26
  1795.  
  1796.  
  1797.           %Y -- The year.
  1798.  
  1799.           %z -- dd-mmm-yyyy.
  1800.  
  1801.           %Z -- dd-mmm-yyyy hh:mm.
  1802.  
  1803.           %% -- Literal percent sign.
  1804.  
  1805.           For  example,  @dateformat(%h)@  inserts  the time in the format
  1806.           hh/mm.  The "%f" and  "%F"  formatting  operators  are  somewhat
  1807.           special.   They  generate  a  date string of the form "mm/dd/yy"
  1808.           (U.S.A.  style) or "dd/mm/yy"  or  "yy.mm.dd"  (European  style)
  1809.           depending on which format the sysop has chosen.
  1810.  
  1811.       @delay(time)@  -- Delay execution for the specified number of tenths
  1812.           of a second.
  1813.  
  1814.       @dlavail@ -- Number of K bytes of download available.
  1815.  
  1816.       @dldaylimit@ -- The user's daily K byte download limit.
  1817.  
  1818.       @dnloadcnt@ -- Total number of files downloaded by user.
  1819.  
  1820.       @dnloadsize@ -- Total size of all files that user has downloaded.
  1821.  
  1822.       @dtespeed@ --  Inserts  the  baud  rate  value  for  the  connection
  1823.           between  your  COM  port  and your modem.  This may be different
  1824.           than the actual modem-to-modem baud rate  that  is  inserted  by
  1825.           @baudrate@.   For example, most sysops set the COM port speed to
  1826.           19200 when using 14400 baud modems.  If a user connects using  a
  1827.           14400  baud  modem  @baudrate@  will insert 14400 but @dtespeed@
  1828.           will insert 19200.
  1829.  
  1830.       @eol@ -- Ignore remainder of line including the carriage-return  and
  1831.           line-feed  characters  at  the  end.  This is most commonly used
  1832.           with the @if()@ operator to skip the remainder of  the  line  so
  1833.           that  a blank line will not appear in the display.  For example,
  1834.           the sequence
  1835.  
  1836.                @if(p1)@@eol@
  1837.                Displayed only if p1 is true.
  1838.                @endif@@eol@
  1839.                This line is always displayed.
  1840.  
  1841.           checks the value of p1.  If it is true  the  @eol@  operator  is
  1842.           encountered  and  the  remainder  of the current line is skipped
  1843.           including  the  carriage-return  and  line-feed  so  nothing  is
  1844.           printed  for  the  line  at  all.   If  the  @if@  is false, the
  1845.           remainder  of  the  line  (including  the  @eol@  operator)   is
  1846.           skipped.   Similarly, when the line with @endif@ is encountered,
  1847.           the @eol@ operator causes  the  remainder  of  the  line  to  be
  1848.           skipped so nothing is printed.
  1849.  
  1850.       Chapter 3. Color and Substitution Operators                       27
  1851.  
  1852.  
  1853.       @expdate@  --  Inserts  the  expiration  date for the account in the
  1854.           format mm/dd/yy.  If the account does  not  have  an  expiration
  1855.           date, the word "never" is inserted.
  1856.  
  1857.       @first@ -- Inserts the user's first name.
  1858.  
  1859.       @fmpname@  --  Inserts  the  current  default file transfer protocol
  1860.           name such as X-modem, Y-modem, or Z-modem.
  1861.  
  1862.       @forumname@ -- Inserts the name of the  discussion  forum  that  the
  1863.           user is currently in.
  1864.  
  1865.       @giget(index)@  --  Inserts  the value of a global integer variable.
  1866.           The  index  argument  selects  which  global  integer  value  to
  1867.           insert; it must be in the range 0 to 99.
  1868.  
  1869.       @grget(index)@  -- Inserts the value of a global real variable.  The
  1870.           index argument selects which global value to insert; it must  be
  1871.           in the range 0 to 99.
  1872.  
  1873.       @group@  -- Inserts the group number for the user.  The group number
  1874.           can be assigned using the SYSOP  program.   It  is  intended  to
  1875.           identify the user with a company or other organization.
  1876.  
  1877.       @gsget(index)@  --  Inserts  the  value of a global string variable.
  1878.           The index argument selects which  global  value  to  insert;  it
  1879.           must be in the range 0 to 99.
  1880.  
  1881.       @handle@  --  Inserts  the user's handle name.  If the user does not
  1882.           have a handle, "none" is inserted.
  1883.  
  1884.       @last@ -- Inserts the user's last name.
  1885.  
  1886.       @lastcall@ -- Inserts the date and time of the last (previous)  call
  1887.           by the current user.
  1888.  
  1889.       @lpp@  --  Inserts  the  number  of  lines that are available on the
  1890.           user's screen.
  1891.  
  1892.       @menutitle(title)@ -- Inserts  the  title  string  in  a  box.   The
  1893.           number  of  spaces  on  the line before the @menutitle@ operator
  1894.           determines how many spaces are placed to the left  of  the  box.
  1895.           This operator should occur on a line by itself.
  1896.  
  1897.       @msgnotify@  -- Inserts the word "Yes" if the user wishes to receive
  1898.           notification messages when a message addressed to  the  user  is
  1899.           posted on a discussion forum.
  1900.  
  1901.       @opibmchar@  --  Inserts  the word "Yes" if the user can display IBM
  1902.           graphic characters or "No" if he cannot.
  1903.  
  1904.       @node@ -- Inserts the line index number.   Each  TSX  line  that  is
  1905.           generated  into  your  TSX  system  is assigned an index number.
  1906.           The first line (typically the console) is number 1,  the  second
  1907.  
  1908.       Chapter 3. Color and Substitution Operators                       28
  1909.  
  1910.  
  1911.           is  number 2, etc.  The @node@ operator inserts the index number
  1912.           of the line that the user is running from.
  1913.  
  1914.       @opansi@ -- Inserts the word "Yes" if ANSI support  is  enabled  for
  1915.           the user or "No" if ANSI support is not enabled.
  1916.  
  1917.       @opansiedit@  --  Inserts  the  word  "Yes"  if the full screen ANSI
  1918.           message editor is to be used or "No" if not.
  1919.  
  1920.       @opcolor@ -- Inserts the word "Yes" if color support is enabled  for
  1921.           the user or "No" if color support is not enabled.
  1922.  
  1923.       @opibmchar@  --  Inserts  the word "Yes" if the user can display IBM
  1924.           graphic characters or "No" if he cannot.
  1925.  
  1926.       @pause@ -- Displays the message "-press  a  key  to  continue-"  and
  1927.           waits for the user to press a key.
  1928.  
  1929.       @phrase(index)@  --  Inserts  the phrase from the system phrase file
  1930.           whose index number is specified.
  1931.  
  1932.       @pos(line,column)@  --  Generates  the  ANSI  escape   sequence   to
  1933.           position  the  cursor  to  the  specified line and column.  This
  1934.           operator is ignored if the  user  does  not  have  ANSI  support
  1935.           enabled.
  1936.  
  1937.       @privlev@ -- Inserts the user's "privilege security level".
  1938.  
  1939.       @pws@  --  Inserts  a  string  indicating what type of personal file
  1940.           workspace the user is authorized to use.  One of  the  following
  1941.           strings  will  be  inserted:  "None",  "Temporary", "Permanent".
  1942.           See Chapter 8 for additional  information  about  personal  file
  1943.           workspaces.
  1944.  
  1945.       @pwsavail@  --  Inserts  the  remaining number of bytes available in
  1946.           the user's personal file workspace.
  1947.  
  1948.       @pwsdir@ -- Inserts  the  name  of  the  user's  personal  workspace
  1949.           directory  if  a permanent directory has been assigned.  Inserts
  1950.           nothing  if  the  user  does  not  have  a  permanent  workspace
  1951.           directory.   See  Chapter  8  for  additional  information about
  1952.           personal file workspaces.
  1953.  
  1954.       @pwssize@ -- Inserts the total number of bytes that  may  be  stored
  1955.           in  the user's personal file workspace.  "(unlimited)" is stored
  1956.           if there is no limit.  See Chapter 8 for additional  information
  1957.           about personal file workspaces.
  1958.  
  1959.       @qwkbbstime@  --  Inserts  "Yes" if the QWK system is to use the BBS
  1960.           time for messages.  Inserts "No" if the QWK system does not  use
  1961.           the BBS time.
  1962.  
  1963.       @qwkbulletins@  --  Inserts  "Yes"  if  QWK downloads are to include
  1964.           system bulletin files or "No" if bulletin files are  not  to  be
  1965.           included.
  1966.  
  1967.       Chapter 3. Color and Substitution Operators                       29
  1968.  
  1969.  
  1970.       @qwkdloff@  --  Inserts  "Yes" if QWK is configured to automatically
  1971.           logoff after downloads or "No" if auto logoff is disabled.
  1972.  
  1973.       @qwkdlempty@ -- Inserts "Yes"  if  QWK  is  configured  to  download
  1974.           empty packets or "No" if not.
  1975.  
  1976.       @qwkdllogoff@  -- Inserts "Yes" if QWK is configured to download the
  1977.           logoff message file or "No" if not.
  1978.  
  1979.       @qwknewfiles@ -- Inserts "Yes" if QWK is configured  to  download  a
  1980.           list of new files or "No" if not.
  1981.  
  1982.       @qwkdlreplies@  --  Inserts  "Yes"  if QWK is configured to download
  1983.           the user's replies or "No" if not.
  1984.  
  1985.       @qwkdlwelcome@ -- Inserts "Yes" if QWK  is  configured  to  download
  1986.           the welcome file or "No" if not.
  1987.  
  1988.       @qwkincemail@  --  Inserts  "Yes"  if  QWK is configured to download
  1989.           e-mail or "No" if not.
  1990.  
  1991.       @qwkincfiles@ -- Inserts "Yes" if QWK is  configured  to  downloaded
  1992.           attached files or "No" if not.
  1993.  
  1994.       @qwklogoff@  --  Inserts  "Yes" if QWK is configured to download the
  1995.           logoff message or "No" if not.
  1996.  
  1997.       @qwkmmp@ -- Inserts a count of the maximum messages per packet  that
  1998.           QWK is configured to download.
  1999.  
  2000.       @qwkmma@  --  Inserts  a count of the maximum messages per area that
  2001.           QWK is configured to download.
  2002.  
  2003.       @qwkmfs@ -- Inserts  the  size  of  the  larges  file  that  QWK  is
  2004.           configured to download.
  2005.  
  2006.       @qwknews@  --  Inserts  "Yes"  if  QWK  is  configured  to  download
  2007.           bulletin files or "No" if not.
  2008.  
  2009.       @qwknodlprmpt@ -- Inserts "Yes" if QWK  is  configured  to  suppress
  2010.           the download confirmation prompt or "No" if not.
  2011.  
  2012.       @qwknondx@  --  Inserts  "Yes" if QWK is configured to skip creation
  2013.           of the NDF file or "No" if not.
  2014.  
  2015.       @qwkuloff@ -- Inserts "Yes" if QWK is configured to  log  off  after
  2016.           an upload or "No" if not.
  2017.  
  2018.       @qwkwelcome@  --  Inserts "Yes" if QWK is configured to download the
  2019.           welcome file or "No" if not.
  2020.  
  2021.       @sysop1@ -- Inserts the name of the first (primary) sysop.
  2022.  
  2023.       @sysop2@ -- Inserts the name of the second sysop.
  2024.  
  2025.       Chapter 3. Color and Substitution Operators                       30
  2026.  
  2027.  
  2028.       @sysop3@ -- Inserts the name of the third sysop.
  2029.  
  2030.       @tagcount@ -- Inserts a  number  indicating  the  number  of  tagged
  2031.           files.
  2032.  
  2033.       @tagsize@ -- Inserts the size of all tagged files.
  2034.  
  2035.       @tagtime@  --  Inserts  an  estimate  of  how  long  it will take to
  2036.           download all of the currently tagged files.
  2037.  
  2038.       @tempdir@ -- Inserts the name of the temporary  directory  that  the
  2039.           BBS  creates  to hold job-related files.  This directory is also
  2040.           used to hold the DOOR.SYS file created by TSX-BBS  when  a  door
  2041.           program  is  started.  The temporary directory name is formed by
  2042.           using the base temp directory that is specified with  the  SYSOP
  2043.           program  and  then  appending a subdirectory that is of the form
  2044.           "TMPnn" where "nn" is a "user  identification  number"  that  is
  2045.           unique for each user.
  2046.  
  2047.       @time@ -- Inserts the current time of day in the format hh:mm.
  2048.  
  2049.       @timeleft@  --  Inserts  the number of minutes of time available for
  2050.           the current user.  "Unlimited" is inserted if the user does  not
  2051.           have a time limit.
  2052.  
  2053.       @timelimit@  --  Inserts  the number of minutes of connect time that
  2054.           the current user is authorized to use each day.  "Unlimited"  is
  2055.           inserted if the user does not have a limit.
  2056.  
  2057.       @totalcalls@  --  Inserts  a count of the total number of times that
  2058.           the user has called the BBS.
  2059.  
  2060.       @totaltime@ -- Inserts the total time that the user has been  logged
  2061.           on during the current session in the form hh:mm:ss.
  2062.  
  2063.       @uploadcnt@  --  Inserts  a count of the number of file uploads that
  2064.           the user has done.
  2065.  
  2066.       @uploadsize@ -- Inserts the total size of all files uploaded by  the
  2067.           user.
  2068.  
  2069.       @user@  --  Inserts  the  user's first and last names separated by a
  2070.           space.
  2071.  
  2072.       @userid@ -- Inserts the  user's  BBS  identification  number.   Each
  2073.           user  is assigned a unique number when they are first authorized
  2074.           and they retain that same number until  they  are  deleted  from
  2075.           the BBS user list.
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.                                    Chapter 4
  2083.  
  2084.                             Conditional Expressions
  2085.  
  2086.  
  2087.  
  2088.  
  2089.       TSX-BBS  allows  the sysop to use conditional expressions to control
  2090.       many aspects of the board including  which  menu  items  appear  and
  2091.       what  privileges  are  required by users to access certain features.
  2092.       This feature is very powerful and  allows  the  sysop  to  make  the
  2093.       board appear quite different to some users than to others.
  2094.  
  2095.       The  same  syntax  for  conditional  expressions  is used throughout
  2096.       TSX-BBS so once you master it you can use  it  at  many  places.   A
  2097.       conditional  expression  has  the  value  true  if it is non-zero or
  2098.       false if it is zero.  Within a conditional expression  you  can  use
  2099.       constants,  comparison  operators  (greater-than,  equal-to,  etc.),
  2100.       logical operators, and special BBS-defined variables.  Each  of  the
  2101.       privilege  flags  is  a  BBS-defined  variable,  as  is  the  user's
  2102.       security level, and many other items such as the user's baud rate.
  2103.  
  2104.       As an example of a conditional expression consider a menu item  that
  2105.       should  only  be presented to users who have ANSI capability and who
  2106.       are running at baud rates of at least  9600.   The  following  lines
  2107.       would display the menu choice only in those cases:
  2108.  
  2109.            @if(ansi && baudrate >= 9600)@@eol@
  2110.               Laser War
  2111.            @endif@@eol@
  2112.  
  2113.       Within  a conditional expression you can use built-in variables such
  2114.       as the ANSI and BAUDRATE variables shown in  the  previous  example.
  2115.       These  variables  are  assigned  values  by the system and are fully
  2116.       described  in  Section  4.3  starting  on  page  33.   Some  of  the
  2117.       variables,  such  as  ANSI,  are  true/false type variables with the
  2118.       values 1 (true) or 0 (false).  For example, a simple test  for  ANSI
  2119.       capability could use the expression:
  2120.  
  2121.            @if(ansi)@
  2122.               << done if ANSI capability >>
  2123.            @else@
  2124.               << done if not ANSI capability >>
  2125.            @endif@
  2126.  
  2127.       Other  system  variables  have  numeric  values.   For  example, the
  2128.       BAUDRATE variable has the  actual  baud  rate  in  bits  per  second
  2129.       (e.g.,  2400,  14400,  etc.).   You can use the following comparison
  2130.       operators within conditional expressions.  They produce the value  1
  2131.       if the comparison is true or 0 if the comparison is false.
  2132.  
  2133.  
  2134.                                        31
  2135.  
  2136.       Chapter 4. Conditional Expressions                                32
  2137.  
  2138.  
  2139.            ==   Equal
  2140.            !=   Not equal
  2141.            <=   Less than or equal
  2142.            >=   Greater than or equal
  2143.            <    Less than
  2144.            >    Greater than
  2145.  
  2146.       For  example,  the  following conditional expression tests to see if
  2147.       the user is connected at 9600 baud or faster.
  2148.  
  2149.            @if(baudrate>=9600)@
  2150.                << User has a high baud rate >>
  2151.            @endif@
  2152.  
  2153.       The  following  logical  operators  can  be  used   in   conditional
  2154.       expressions:
  2155.  
  2156.            !    Logical NOT (negates true and false)
  2157.            &&   AND
  2158.            ||   OR
  2159.  
  2160.       So,  for  example,  the  following conditional expression checks for
  2161.       users who have ANSI capability and are connected  at  9600  baud  or
  2162.       faster:
  2163.  
  2164.            @if(ansi && baudrate>=9600)@
  2165.                << ANSI and 9600 baud or faster >>
  2166.            @endif@
  2167.  
  2168.       Operator  precedence,  in  decreasing  order, is as follows: logical
  2169.       NOT,  relational  (comparison),  logical  AND  ("&&"),  logical   OR
  2170.       ("||").   You  may  use  parentheses  in  complicated expressions to
  2171.       group terms.  For example, the following expression is true  if  the
  2172.       user has S1 privilege enabled or if he has S2 and S3:
  2173.  
  2174.            @if(S1 || (S2 && S3))@
  2175.                << S1 or S2 and S3 >>
  2176.            @endif@
  2177.  
  2178.  
  2179.       4.1 Built-in Privileges
  2180.  
  2181.       TSX-BBS   defines  a  number  of  "built-in"  privileges  that  have
  2182.       predefined meanings.  For a list of the current built-in  privileges
  2183.       run  the SYSOP program, select the User Authorization function, then
  2184.       select the user class function, and examine the entry for  a  class.
  2185.       You  will  see  that the built-in privileges have textual names such
  2186.       as "Forum", "Mail", "Run doors", etc.  and  abbreviated  names  such
  2187.       as  P00,  P01,  etc.   The Pnn names can be used in your conditional
  2188.       expressions to test if a built-in privilege is enabled  or  disabled
  2189.       for  the  current user.  For example, P02 is the privilege flag that
  2190.       allows users to download files, so the  following  expression  would
  2191.       test to see if a user has download privilege:
  2192.  
  2193.       Chapter 4. Conditional Expressions                                33
  2194.  
  2195.  
  2196.            @if(P02)@
  2197.                << User has download privilege >>
  2198.            @endif@
  2199.  
  2200.  
  2201.       4.2 Sysop-defined Privileges
  2202.  
  2203.       In  addition  to  the  built-in  privileges  which  have  predefined
  2204.       meanings, TSX-BBS allows the sysop to define up  to  80  privileges.
  2205.       These  sysop-defined  privileges do not have any inherent meaning to
  2206.       the BBS system but may  be  used  in  conditional  expressions.   An
  2207.       example  of  a  sysop-defined privilege might be the privilege given
  2208.       to some users allowing them to access adult oriented files.
  2209.  
  2210.       As with built-in  privileges,  sysop-defined  privileges  have  both
  2211.       textual  names  and  short  names that are used in expressions.  The
  2212.       short names have the form "Snn" where "nn" is a  one  or  two  digit
  2213.       sequence  in  the  range  1  to  79.   For  example,  the  following
  2214.       conditional  expression  is  true   if   the   first   sysop-defined
  2215.       privilege, S00, is enabled for the user:
  2216.  
  2217.            @if(S00)@
  2218.                << User has S00 privilege >>
  2219.            @endif@
  2220.  
  2221.       To  define  a  sysop  privilege run the SYSOP program and select the
  2222.       User  Authorization  function.   Then  type  'P'   to   select   the
  2223.       Privileges  function.   You will then see the first of several pages
  2224.       of potential privilege entries.  You will see  that  each  privilege
  2225.       has  an  associated  short  name of the form "Snn" and a field where
  2226.       you can specify a textual name for the privilege.  The textual  name
  2227.       is  just  for  your  reference; it has no effect on the operation of
  2228.       the BBS.  For example, if you wish to make  S00  be  an  adult  file
  2229.       library  privilege,  position  the  cursor  to  the start of the S00
  2230.       privilege name field and  type  in  something  like  "Adult  files".
  2231.       Define  any  additional  privileges that you wish and then press ESC
  2232.       to exit.  Now, from the  main  User  Authorization  menu,  select  a
  2233.       user's  entry  and press Enter to examine it.  Press Page Down a few
  2234.       times and you will come to a page that shows  which  privileges  the
  2235.       user  is  authorized for.  The left column shows built-in privileges
  2236.       and the right column shows sysop-defined privileges.   You  may  set
  2237.       privileges to 'Y' to enable them or 'N' to disable them.
  2238.  
  2239.  
  2240.       4.3 System Variables
  2241.  
  2242.       The  following  system  variables  may  be  used  within conditional
  2243.       expressions:
  2244.  
  2245.       ANSI -- Has the value 1  if  the  user  has  ANSI  terminal  control
  2246.           capability or 0 if not.
  2247.  
  2248.       BAUDRATE  --  The  baud  rate of the current user.  The value is the
  2249.           actual  data  communications  speed  between  the  BBS  and  the
  2250.           caller's  modem  such  as  14400,  2400,  etc.   This  value  is
  2251.  
  2252.       Chapter 4. Conditional Expressions                                34
  2253.  
  2254.  
  2255.           determined by examining the "CONNECT nnnnn" message returned  by
  2256.           your  modem  when  the connection is established.  If your modem
  2257.           does not send in a connection  speed  message,  then  the  value
  2258.           returned  is  the  speed of the line between your computer's COM
  2259.           port and the modem rather than the modem-to-modem speed.
  2260.  
  2261.       COLOR -- Has the value 1 if the user has  color  display  capability
  2262.           or 0 if not.
  2263.  
  2264.       CONSOLE  --  Has  the value 1 if the user is running at the console.
  2265.           Has the value  0  if  the  user  is  running  through  a  serial
  2266.           communications line.
  2267.  
  2268.       DAY -- Day of the month in the range 1 to 31.
  2269.  
  2270.       DAYOFWEEK  --  Day of the week.  The value is 1 based so Sunday is 1
  2271.           and Saturday is 7.
  2272.  
  2273.       DEMOBBS -- Has the value 1 if the TSX-32 system is not  licensed  to
  2274.           run  TSX-BBS  and  the  current user is running through a serial
  2275.           line.  Has the value 0 if the TSX-32 system is licensed  to  run
  2276.           TSX-BBS or the current user is running at the console.
  2277.  
  2278.       DTESPEED  -- Speed setting of the COM port through which the user is
  2279.           connected.  This may be different  than  the  BAUDRATE  variable
  2280.           that indicates the actual modem-to-modem speed.
  2281.  
  2282.       EXISTS(filename)  --  If the specified file exists then the value is
  2283.           1; otherwise the value is 0.
  2284.  
  2285.       GROUP -- The group number for the user.  The  group  number  can  be
  2286.           assigned  using  the  SYSOP program.  It is intended to identify
  2287.           the user with a company or  other  organization.   For  example,
  2288.           the  following  conditional  expression  would select only those
  2289.           users who are in group 46: "GROUP==46".
  2290.  
  2291.       HOUR -- Hour of the day in the range 0  to  23.   For  example,  the
  2292.           following   expression   is  only  true  between  1AM  and  6AM:
  2293.           "HOUR>=1&&HOUR<6".
  2294.  
  2295.       IBMCHAR -- Has the value 1 if the  user  can  display  IBM  graphics
  2296.           characters or 0 if not.
  2297.  
  2298.       MINUTE -- Minute of the hour in the range 0 to 59.
  2299.  
  2300.       MONTH -- Month number in the range 1 to 12.
  2301.  
  2302.       NEWFILE(filename)  --  If the specified file exists and its creation
  2303.           date is newer than the date when the user last logged  on,  then
  2304.           the value is 1; otherwise the value is 0.
  2305.  
  2306.       NODE -- Terminal line number.
  2307.  
  2308.       Chapter 4. Conditional Expressions                                35
  2309.  
  2310.  
  2311.       PHONELINE  --  Has  the  value  1 if the user is connected through a
  2312.           dial-up  phone  connection.   Has  the  value  0  for  hardwired
  2313.           connections.
  2314.  
  2315.       PRIVLEV  --  The  sysop  may  assign a privilege "security level" to
  2316.           users.  This value may be in the range 0 to  999.   The  TSX-BBS
  2317.           system  does  not make use of the security level but you can use
  2318.           it in conditional expressions.
  2319.  
  2320.       QWKSERVICES -- Has a count of the number of defined QWK services.
  2321.  
  2322.       TAGCOUNT -- Has a count of the number of files  that  are  currently
  2323.           tagged and waiting to be downloaded.
  2324.  
  2325.       TELNET  --  Has  the  value  1  if  the user is connected through an
  2326.           incoming Telnet connection.  The value  is  0  if  the  user  is
  2327.           connected  through  a dial-in phone connection or is running the
  2328.           BBS from the system console.
  2329.  
  2330.       YEAR -- The current year including the century (e.g., 1994).
  2331.  
  2332.  
  2333.       4.4 Conditional Expressions in Menus and Text
  2334.  
  2335.       There are many places where conditional expressions can be  used  to
  2336.       control  the  operation  of  the  bulletin board.  One such place is
  2337.       within text that is displayed to the user.  This text  may  be  used
  2338.       in  a  menu,  a message such as a logon greeting, or a status update
  2339.       message.  The @if(expression)@,  @else@,  and  @endif@  substitution
  2340.       operators  are  used  for conditional control of text.  When TSX-BBS
  2341.       encounters a @if(expression)@  substitution  operator  it  evaluates
  2342.       the  'expression'  value  and  if  the expression value is false (0)
  2343.       begins skipping text.  The skipping continues until  an  @endif@  or
  2344.       @else@  operator  is  found  in the text.  For example, consider the
  2345.       following display line.
  2346.  
  2347.            You @if(ansi)@have@else@do not have@endif@ ANSI capability.
  2348.  
  2349.       When the @if(ansi)@ expression is found, TSX-BBS checks  to  see  if
  2350.       the   current  user  has  ANSI  control  capability.   If  so,  text
  2351.       processing continues with the next character and the word "have"  is
  2352.       displayed.   If  the  @if(ansi)@  expression  is false, then text is
  2353.       skipped up to the @else@ operator and the text that follows it  ("do
  2354.       not have") is displayed.
  2355.  
  2356.       In  many  cases  you may wish to use conditional operators to select
  2357.       whole lines of text.  For example, consider the following text:
  2358.  
  2359.       Chapter 4. Conditional Expressions                                36
  2360.  
  2361.  
  2362.            Capability summary:
  2363.            @if(ansi)@
  2364.            You have ANSI capability.
  2365.            @else@
  2366.            You do not have ANSI capability.
  2367.            @endif@
  2368.            @if(color)@
  2369.            You have color capability.
  2370.            @else@
  2371.            You do not have color capability.
  2372.            @endif@
  2373.  
  2374.       This displays different lines depending  on  whether  the  user  has
  2375.       ANSI  and  color  capability.  However, this may not do exactly what
  2376.       you want.  The problem is  that  if  the  @if(ansi)@  expression  is
  2377.       true,   text   processing  continues  and  the  carriage-return  and
  2378.       line-feed characters at the end of the  line  containing  @if(ansi)@
  2379.       are  displayed.   A similar problem occurs on the @else@ and @endif@
  2380.       lines.  The result is that you end up with extra blank lines in  the
  2381.       displayed  text.   The proper way to do this is to use the following
  2382.       commands:
  2383.  
  2384.            Capability summary:
  2385.            @if(ansi)@@eol@
  2386.            You have ANSI capability.
  2387.            @else@@eol@
  2388.            You do not have ANSI capability.
  2389.            @endif@@eol@
  2390.            @if(color)@@eol@
  2391.            You have color capability.
  2392.            @else@@eol@
  2393.            You do not have color capability.
  2394.            @endif@@eol@
  2395.  
  2396.       The  @eol@  operator  means  "end  of  line".   It  terminates  text
  2397.       processing  for the line immediately; any characters that follow it,
  2398.       including the carriage-return and line-feed at the end of the  line,
  2399.       are ignored.
  2400.  
  2401.       You  may  nest  @if()@, @else@, and @endif@ operators.  If an @if()@
  2402.       operator is false, TSX-BBS skips all text,  including  other  @if()@
  2403.       and  @endif@ operators until it finds the matching @else@ or @endif@
  2404.       operator.  Similarly, if an @else@ operator  is  found  that  begins
  2405.       skipping,   the   skipping  continues  until  the  matching  @endif@
  2406.       operator is found.
  2407.  
  2408.  
  2409.  
  2410.  
  2411.  
  2412.  
  2413.                                    Chapter 5
  2414.  
  2415.                                  Menu Compiler
  2416.  
  2417.  
  2418.  
  2419.  
  2420.       One of the key features of the TSX-BBS is that it allows you  easily
  2421.       to  create  and  customize  menus.   You can select the placement of
  2422.       items on menus, the colors, and limit displayed items based on  user
  2423.       classes and privileges.
  2424.  
  2425.       The   TSX-BBS   MENU  program  is  a  compiler  that  reads  a  menu
  2426.       description source file that you create using an ASCII  editor,  and
  2427.       produces   a   compiled  menu  object  file  that  can  be  executed
  2428.       efficiently by  the  BBS  system.   The  BBS  menu  design  language
  2429.       includes  a rich set of commands and actions to make it easy for you
  2430.       to design menues and  look  good  and  perform  a  wide  variety  of
  2431.       actions.
  2432.  
  2433.  
  2434.       5.1 Using the Menu Compiler
  2435.  
  2436.       The  menu compiler is a program named MENU.EXP.  This file should be
  2437.       placed in a directory  that  is  part  of  your  search  path.   The
  2438.       command to compile a menu has the form
  2439.  
  2440.            MENU source_file [object_file]
  2441.  
  2442.       where  "source_file"  is  the  name  of  the menu source description
  2443.       file.  The  default  extension  for  these  files  is  ".MNU".   The
  2444.       "object_file"  argument  specifies  the name of the menu object file
  2445.       that is to be created.  If you do not specify an  object  file,  the
  2446.       menu  compiler  creates a file with the same name as the source file
  2447.       but with the extension ".TMU".  For example, the  following  command
  2448.       compiles  a  menu file named "files.mnu" and produces an object file
  2449.       named "files.tmu":
  2450.  
  2451.            menu files
  2452.  
  2453.  
  2454.       5.2 Introductory Example
  2455.  
  2456.       Before getting into the details of  menu  design,  lets  look  at  a
  2457.       simple  example  menu  which  could  be  used  to control the E-mail
  2458.       operations of the BBS:
  2459.  
  2460.  
  2461.  
  2462.  
  2463.  
  2464.  
  2465.                                        37
  2466.  
  2467.       Chapter 5. Menu Compiler                                          38
  2468.  
  2469.  
  2470.            $name Main menu
  2471.            $hot
  2472.            $prompt Choice:
  2473.            $display
  2474.            @cls@
  2475.  
  2476.            @menutitle(Mail Menu)@
  2477.  
  2478.              `Message to SYSOP
  2479.              `Write message
  2480.              `Read messages
  2481.              `Filing cabinet
  2482.              `Synonyms
  2483.              `Address book
  2484.              `Quit
  2485.  
  2486.            $item key=M action=mailsysop
  2487.            $item key=W action=mailsend
  2488.            $item key=R action=mailrecv
  2489.            $item key=F action=mailfile
  2490.            $item key=S action=mailsyn
  2491.            $item key=A action=mailabook
  2492.            $item key=Q action=return
  2493.            $item key=(other) action=return
  2494.  
  2495.       Each section of the menu description begins with a command that  has
  2496.       '$'  as  its first character.  The first command,"$name", declares a
  2497.       phrase to be displayed as the activity for user  while  running  the
  2498.       menu.   The  next command, "$hot", indicates that "hot keys" (single
  2499.       characters) are to be used to make menu selections.   The  "$prompt"
  2500.       command  indicates that the word "Choice:" is to be displayed at the
  2501.       bottom of the menu to prompt the user to type a command key.
  2502.  
  2503.       The "$display" command begins the section of the menu that  has  the
  2504.       text  that  is  to  be  displayed  as  the  menu.   All of the lines
  2505.       following $display up to the first $item command  are  displayed  on
  2506.       the  user's screen as the text of the menu.  Within the display text
  2507.       you may use text substitution operators such  as  "@cls@"  to  clear
  2508.       the  screen.   Within  the  display  text,  you  can  use the accent
  2509.       character  (`)  in  front  of  characters  that  you  wish  to  have
  2510.       highlighted  as  hot  key characters.  The BBS system displays these
  2511.       characters in a different color and encloses them in  brackets.   In
  2512.       this  example,  the  'M' of "Message to Sysop" and the 'W' of "Write
  2513.       message" will be highlighted.
  2514.  
  2515.       The $item commands tell the menu compiler what action to  take  when
  2516.       various  keys  (or  commands)  are entered.  In this example the 'M'
  2517.       key invokes an action named "mailsysop".  This particular action  is
  2518.       built  into the BBS, but you have the option of invoking other menus
  2519.       that you write or running TPL programs.
  2520.  
  2521.       Each of the menu commands is described in detail  in  sections  that
  2522.       follow.
  2523.  
  2524.       Chapter 5. Menu Compiler                                          39
  2525.  
  2526.  
  2527.       5.3 $name -- Activity name for menu
  2528.  
  2529.       The  $name  command  declares a name string that is displayed as the
  2530.       current activity for the user while the menu is  active.   The  form
  2531.       of the command is
  2532.  
  2533.            $name name_string
  2534.  
  2535.       Where  "name_string"  is  one  or  more words to be displayed as the
  2536.       users activity.  The $name command is optional;  if  it  is  omitted
  2537.       the name of the menu file is used as the activity name.
  2538.  
  2539.  
  2540.       5.4 $hot -- Single character activation
  2541.  
  2542.       The  $hot command tells the BBS compiler that menu actions are to be
  2543.       triggered by pressing a single key without  having  to  type  Enter.
  2544.       The  $hot  command  is  ignored if any of the keys declared in $item
  2545.       commands are more than a single  character  long.   If  you  do  not
  2546.       specify  $hot,  the user will have to press Enter after entering the
  2547.       command key.
  2548.  
  2549.  
  2550.       5.5 $prompt -- Prompt string
  2551.  
  2552.       The form of the $prompt command is
  2553.  
  2554.            $prompt command
  2555.  
  2556.       where "command" is a word or phrase that is to be displayed  at  the
  2557.       bottom  of the menu to prompt the user to type a key or command.  If
  2558.       you do not provide a $prompt command the "MPROMPT"  phrase  is  used
  2559.       as  the  default.   The  default  english prompt is "Command:".  For
  2560.       example, the following command would cause "Make  a  selection:"  to
  2561.       be displayed as the prompt:
  2562.  
  2563.            $prompt Make a selection:
  2564.  
  2565.  
  2566.       5.6 $display -- Display text for menu
  2567.  
  2568.       The  $display  command  begins  the section of the menu that has the
  2569.       text to be displayed.  There are two forms of the $display  command.
  2570.       The first form is
  2571.  
  2572.            $display file
  2573.  
  2574.       where  "file"  is the name of a separate file that contains the text
  2575.       of the menu to display.  This form of the command is useful  if  you
  2576.       wish  to  use  an  ANSI  editor  or  some  other program to help you
  2577.       construct your  menu  text.   For  example,  the  following  command
  2578.       causes a file named "voting.txt" to be displayed for the menu:
  2579.  
  2580.            $display c:\bbs\voting.txt
  2581.  
  2582.       Chapter 5. Menu Compiler                                          40
  2583.  
  2584.  
  2585.       The  display  file  may  include  text substitution and color change
  2586.       operators.  You should specify the device and  directory  where  the
  2587.       file is located.
  2588.  
  2589.       The  second  form  of  the $display command is used when you wish to
  2590.       include the text as part of the menu description  file.   This  form
  2591.       of the command is:
  2592.  
  2593.            $display
  2594.            << text to display>>
  2595.            $<< next command >>
  2596.  
  2597.       Note  that  there is no file name on the $display command line.  The
  2598.       text to be displayed begins  on  the  line  following  the  $display
  2599.       command  and  continues  on  subsequent  lines down to the next menu
  2600.       command that begins  with  a  dollar  sign.   The  following  is  an
  2601.       example of this form of the command:
  2602.  
  2603.            $display
  2604.            @cls@
  2605.  
  2606.            @menutitle(Mail Menu)@
  2607.  
  2608.              `Message to SYSOP
  2609.              `Write message
  2610.  
  2611.       In  addition  to  text  substitution  operators  such as "@cls@" and
  2612.       color change operators such  as  "@X07",  you  can  use  the  accent
  2613.       character  to  mark  letters that are to be highlighted as hot keys.
  2614.       Note,  the  accent  character  is  not  the  apostrophe.   On   most
  2615.       keyboards  the  accent  character  is  on  the top left key with the
  2616.       tilde character.  In this example the 'M' of "Message to sysop"  and
  2617.       the  'W'  of  "Write message" will be highlighted.  The highlighting
  2618.       consists of using a different color for the letter and enclosing  it
  2619.       in   brackets.   The  use  of  the  accent  character  to  mark  hot
  2620.       characters is optional.  Other than  changing  the  display  of  the
  2621.       character  it  does not affect the operation of the menu.  Note that
  2622.       the  actual  characters  that  cause  actions  to  take  place   are
  2623.       specified   by   the  $item  commands  and  are  affected  by  which
  2624.       characters are highlighted.
  2625.  
  2626.       The "@menutitle(text)@" text substitution command  may  be  used  to
  2627.       create  menu  title lines.  The text in the parentheses is displayed
  2628.       in the standard title color and is enclosed in a box.  You  may  not
  2629.       use text substitution commands within the text string.
  2630.  
  2631.       You  can  also  use  @if(expression)@,  @else@, and @endif@ commands
  2632.       within the display portion of a menu to control which items  are  to
  2633.       be  displayed.  Section 4.4 on page 35 explains the @if()@ operator.
  2634.       The following is an example of a menu that only  displays  the  chat
  2635.       item to users who have the P8 privilege enabled:
  2636.  
  2637.       Chapter 5. Menu Compiler                                          41
  2638.  
  2639.  
  2640.              `Electronic mail
  2641.              `Discussion Forums
  2642.            @if(p8)@@eol@
  2643.              `Chat
  2644.            @endif@@eol@
  2645.              `Who is on
  2646.  
  2647.       You  can use text substitution operators and @if()@ operators in the
  2648.       display text if it is part of the menu  file  or  if  it  is  in  an
  2649.       external file.
  2650.  
  2651.  
  2652.       5.7 $item -- Action item
  2653.  
  2654.       The  $item  command  is  used  to specify what action is to be taken
  2655.       when menu selection keys and commands  are  entered.   The  form  of
  2656.       this command is
  2657.  
  2658.            $item option1 option2 option3 ...
  2659.  
  2660.       where  "option1",  etc.   are  optional  clauses  described  in  the
  2661.       following sections.
  2662.  
  2663.       Long $item commands can be continued  across  multiple  lines.   The
  2664.       command  ends  when  the next line is encountered that begins with a
  2665.       command keyword.  The following is an example  of  a  $item  command
  2666.       that spans two lines:
  2667.  
  2668.            $item key=C action=logwrite(Play Chess);
  2669.                  door("c:\pchess\pchess.cmd","Beginning Chess")
  2670.                  if(S8)
  2671.  
  2672.       5.7.1 key -- Character or command
  2673.  
  2674.       The  key clause specifies which hot key or command is to trigger the
  2675.       associated action.  The key and commands  are  not  case  sensitive.
  2676.       The form of this clause is
  2677.  
  2678.            key=string
  2679.  
  2680.       where  "string" is the letter or command that the user is to type to
  2681.       cause the associated action to occur.  You may enclose  the  command
  2682.       string  in  quote  signs  if  it  contains  a  space; otherwise, the
  2683.       command string ends at the first space,  tab,  or  the  end  of  the
  2684.       line.   The  following is an example of a $item that lists the users
  2685.       on-line when a space is typed:
  2686.  
  2687.            $item key=" " action=who
  2688.  
  2689.       There is a special action key named "(esc)" that corresponds to  the
  2690.       Esc  (escape) key.  For example, the following set of actions return
  2691.       when either the letter 'Q' or ESC is pressed:
  2692.  
  2693.            $item key=Q action=return
  2694.            $item key=(esc) action=return
  2695.  
  2696.       Chapter 5. Menu Compiler                                          42
  2697.  
  2698.  
  2699.       One, and only one, $item command may have  a  key  clause  with  the
  2700.       "(other)"  specification.   If such a $item command is provided, the
  2701.       specified action is taken if there is no other  $item  command  that
  2702.       matchs  the  command  string  that  the user enters.  The $item with
  2703.       "key=(other)" must be the last $item.   If  there  is  no  "(other)"
  2704.       type  item  and  a key is pressed that is not defined by some $item,
  2705.       then the bell is rung and no action  is  performed.   The  following
  2706.       are examples of key clauses.
  2707.  
  2708.            $item key=Q action=return
  2709.            $item key=(esc) action=return
  2710.            $item key="SEND MAIL" action=tpr("mail")
  2711.            $item key=(other) action=return
  2712.  
  2713.       5.7.2 if -- Conditional item
  2714.  
  2715.       The  "if"  clause  allows  you  to  specify  actions  that  are only
  2716.       available if certain conditions are met.  The form of the if  clause
  2717.       is
  2718.  
  2719.            if(expression)
  2720.  
  2721.       Where   "expression"   is   a  logical  expression  including  items
  2722.       described in Chapter 4  starting  on  page  31.   For  example,  the
  2723.       following  $item  command  will be triggered when the user types 'A'
  2724.       only if the user has 'p1' privilege:
  2725.  
  2726.            $item key=A if(p1)
  2727.  
  2728.       In some  cases  it  is  useful  to  have  the  same  letter  perform
  2729.       different  actions  depending  on the class or privileges of a user.
  2730.       For example, a BBS that offers an adult picture section may want  to
  2731.       begin  a file browse when 'A' is typed by properly authorized users,
  2732.       but for other users it may want to display an explanation file.   To
  2733.       do  this,  use  multiple  $item  commands with the same "key=string"
  2734.       clauses but with  if  clauses  that  control  which  privileges  are
  2735.       required  to  invoke  the  command.   Since  the  $item commands are
  2736.       scanned in the order in which you write them, the first  $item  that
  2737.       meets  the  requirements  of  its  if  clause  is  executed.  In the
  2738.       following example the fallist action  is  invoked  when  users  with
  2739.       'p1'  privilege  type  'A'  but  all other users invoke the dispfile
  2740.       action:
  2741.  
  2742.            $item key=A if(p1) action=fallist(bbs:adult,"Adult files")
  2743.            $item key=A action=dispfile(bbs:noadult.txt)
  2744.  
  2745.       5.7.3 action -- Menu action
  2746.  
  2747.       The action clause specifies which action is to  be  taken  when  the
  2748.       associated key or command is entered.  The form of this clause is
  2749.  
  2750.            action=name
  2751.  
  2752.       where  "name"  is  the action keyword name.  Some of the actions are
  2753.       simple words such as "return" and  "exit".   Other  actions  require
  2754.  
  2755.       Chapter 5. Menu Compiler                                          43
  2756.  
  2757.  
  2758.       one   or   more   argument   values.   Arguments  are  specified  in
  2759.       parentheses following the action keyword.  If  there  is  more  than
  2760.       one  argument,  separate  the arguments with commas.  If an argument
  2761.       has a comma as part of its text, enclose it  in  quote  signs.   The
  2762.       following are example actions:
  2763.  
  2764.            $item key=Q action=return
  2765.            $item key=G action=offcheck
  2766.            $item key=F action=menu(\bbs\file)
  2767.            $item key=D action=display("Sorry, you can't do this")
  2768.            $item key=L action=fallist(bbs:master,"All file areas")
  2769.  
  2770.       5.7.3.1 Combined actions
  2771.  
  2772.       It  is  also  possible to cause more than one action to be performed
  2773.       when a key is pressed.  To do this specify multiple action  keywords
  2774.       after  "action="  and  separate  the  keywords with semicolons.  For
  2775.       example, the following command writes a string to the BBS  log  file
  2776.       and then enters a submenu named "business":
  2777.  
  2778.            $item key=B action=(Entering business);menu(business)
  2779.  
  2780.       If  the set of items is too long for one line you may continue on to
  2781.       subsequent lines.
  2782.  
  2783.       The following sections describe each available action.
  2784.  
  2785.       5.7.3.2 actname -- Set activity name
  2786.  
  2787.       The BBS maintains an "activity" name for each  user  that  indicates
  2788.       what  sort  of  operation the user is currently doing.  The activity
  2789.       name is automatically set to the name of a menu  when  the  menu  is
  2790.       entered;  other  activity  names such as "Upload" and "Download" are
  2791.       set as actions are performed.  The actname action allows you to  set
  2792.       an activity name on your own.  The form of the action is
  2793.  
  2794.            action=actname(name)
  2795.  
  2796.       Where  'name'  is  an  activity name that may be up to 16 characters
  2797.       long.
  2798.  
  2799.       5.7.3.3 autologoff -- Do count down and then logoff
  2800.  
  2801.       The autologoff action displays a message telling the user  that  the
  2802.       auto-logoff  sequence  has  been  started.  It then displays a count
  2803.       down that shows the number of seconds remaining until  the  log  off
  2804.       will  occur.  If the user types a key during the count down, the log
  2805.       off is aborted and control returns  to  the  menu.   If  no  key  is
  2806.       pressed, the user is logged off.  The form of the action is
  2807.  
  2808.            action=autologoff
  2809.  
  2810.       Chapter 5. Menu Compiler                                          44
  2811.  
  2812.  
  2813.       5.7.3.4 bbsexit -- Exit from BBS to TSX
  2814.  
  2815.       The  bbsexit  action  is  similar  to  the  logoff action in that it
  2816.       causes the user to log off of the BBS.  However, bbsexit leaves  the
  2817.       user  connected  to  the computer after exiting from the BBS so that
  2818.       the user can execute TSX system  commands  and  run  programs  other
  2819.       than  the  BBS.  This is useful for sysops who wish to exit from the
  2820.       BBS so that  they  can  run  the  SYSOP  control  program  or  other
  2821.       programs.   However,  it  is  vital  that  the use of this action be
  2822.       limited to properly authorized users because once a user has  exited
  2823.       from  the  BBS  to  the TSX system they can execute commands such as
  2824.       "DEL *.*" which could cause great harm to the system.  The  form  of
  2825.       the action is
  2826.  
  2827.            action=bbsexit
  2828.  
  2829.       5.7.3.5 brfile -- Browse text file
  2830.  
  2831.       The  brfile  action  permits  the  user to browse the contents of an
  2832.       external text file such as a help file or list of phone numbers  for
  2833.       the  board.   It is similar to the dispfile menu action.  The brfile
  2834.       action permits the user to move forward and  backward  in  the  file
  2835.       whereas  dispfile  does not.  However, dispfile permits substitution
  2836.       constructs in the text whereas brfile does not.
  2837.  
  2838.       5.7.3.6 chathandle -- Change chat handle
  2839.  
  2840.       The chathandle action displays the user's current  chat  handle  and
  2841.       then prompts the user for a new handle.  The form of the action is
  2842.  
  2843.            action=chathandle
  2844.  
  2845.       5.7.3.7 chatjoin -- Join a chat group
  2846.  
  2847.       The  chatjoin  action  displays  a list of the currently active chat
  2848.       groups and allows the user to select which one to  be  joined.   The
  2849.       form of the action is
  2850.  
  2851.            action=chatjoin
  2852.  
  2853.       5.7.3.8 chatmake -- Create a chat group
  2854.  
  2855.       The  chatmake  action  prompts the user for the name of a chat group
  2856.       that is to be created, makes the group, and  then  enters  the  user
  2857.       into the group.  The form of the action is
  2858.  
  2859.            action=chatmake
  2860.  
  2861.       5.7.3.9 chatuser -- List users in chat
  2862.  
  2863.       The  chatuser action displays a list of the users that are currently
  2864.       participating in chat.  The form of the action is
  2865.  
  2866.            action=chatuser
  2867.  
  2868.       Chapter 5. Menu Compiler                                          45
  2869.  
  2870.  
  2871.       5.7.3.10 datesearch -- Search for files by date
  2872.  
  2873.       The datesearch action begins the BBS operation that searches a  file
  2874.       area  for  all  files  created  since a specified date.  The user is
  2875.       prompted to enter the date.  The form of the action is
  2876.  
  2877.            action=datesearch(falname[,fdlname])
  2878.  
  2879.       where 'falname' is the name of the  FAL  file  containing  the  area
  2880.       descriptions  and  'fdlname'  is  the  name  of  the  FDL  file that
  2881.       contains the file descriptions to be  searched.   If  you  omit  the
  2882.       'fdlname'  argument  then  all  FDL files listed in the FAL file are
  2883.       searched.  For example, the following action  searches  files  in  a
  2884.       FDL  list  called  "bbs:swim"  that  is  part  of  a FAL area called
  2885.       "bbs:master":
  2886.  
  2887.            action=datesearch(bbs:master,bbs:swim)
  2888.  
  2889.       whereas the following action searches all  FDL  files  contained  in
  2890.       the bbs:master FAL:
  2891.  
  2892.            action=datesearch(bbs:master)
  2893.  
  2894.       5.7.3.11 dirupload -- Upload files to a directory
  2895.  
  2896.       The  dirupload  action prompts the user for the names of one or more
  2897.       files to  be  uploaded  and  places  the  uploaded  files  into  the
  2898.       directory  whose  name  you  specify as an argument to the dirupload
  2899.       action.  This action does a "raw" file upload and  does  not  update
  2900.       any  information  in  any file description file (fdl file).  Use the
  2901.       fdlupload action to upload files and  accept  descriptions  for  fdl
  2902.       files.  The form of the action is
  2903.  
  2904.            action=dirupload(dirname)
  2905.  
  2906.       where  'dirname'  is  the name of the directory where uploaded files
  2907.       are to be placed.
  2908.  
  2909.       5.7.3.12 dispfile -- Display a file
  2910.  
  2911.       The dispfile action displays a file.  The form of this action is
  2912.  
  2913.            action=dispfile(file_name[,subcmd])
  2914.  
  2915.       where  "file_name"  is  the  specification  for  the  file   to   be
  2916.       displayed.   The  file  is displayed and a prompt, "- press a key to
  2917.       continue -", is presented at the end.
  2918.  
  2919.       The 'subcmd' argument controls  whether  substitution  operators  of
  2920.       the  form  "@word@"  are  processed if they are found in the text of
  2921.       the file.  If the 'subcmd' argument is  omitted  or  a  value  of  1
  2922.       (true)  is specified for it, then embedded substitution commands are
  2923.       replaced by the appropriate  system-supplied  text  strings.   If  0
  2924.       (zero)  is  specified  for  'subcmd'  then  at-signs in the file are
  2925.       treated as ordinary characters rather than command delimiters.
  2926.  
  2927.       Chapter 5. Menu Compiler                                          46
  2928.  
  2929.  
  2930.       Also see the brfile menu action, described on page 44.
  2931.  
  2932.       5.7.3.13 display -- Display a string
  2933.  
  2934.       The display action displays a string  on  the  user's  screen.   The
  2935.       form of the action is
  2936.  
  2937.            action=display(string[,subcmd])
  2938.  
  2939.       where  "string"  is  the  text string to be displayed.  The "subcmd"
  2940.       argument  controls  whether  substitution  operators  of  the   form
  2941.       "@word@"  are  processed  if they are found in the text of the file.
  2942.       If the "subcmd" argument is omitted  or  a  value  of  1  (true)  is
  2943.       specified  for  it, then embedded substitution commands are replaced
  2944.       by the appropriate system-supplied text strings.   If  0  (zero)  is
  2945.       specified  for  "subcmd"  then  at-signs  in the file are treated as
  2946.       ordinary characters rather than command delimiters.
  2947.  
  2948.       For example, the following  $item  command  displays  "You  are  not
  2949.       privileged  for  this"  when  the  user types 'A'.  The "pause" menu
  2950.       action is similar to this one but pauses until the user types a  key
  2951.       after displaying the message.
  2952.  
  2953.            $item key=A action=display(You are not privileged for this)
  2954.  
  2955.       5.7.3.14 door -- Run door program
  2956.  
  2957.       The  door  action  begins  execution  of an external "door" program.
  2958.       The form of the action is
  2959.  
  2960.            action=door(cmdline[,message[,activity]])
  2961.  
  2962.       where 'cmdline' is the command line that is to be passed to the  TSX
  2963.       command  interpreter  to execute the door batch file.  The 'message'
  2964.       argument is  optional.   If  specified,  it  is  a  string  that  is
  2965.       displayed  in  a  box  while  the  door  is  being started.  You can
  2966.       specify something like "Starting chess" to give the users  something
  2967.       to  look  at  while  the  door  is  getting started.  The 'activity'
  2968.       argument is also optional.  If specified,  it  is  a  string  to  be
  2969.       displayed  as  the  current  activity for the user while the door is
  2970.       running.
  2971.  
  2972.       You  can  specify  arguments  after  the  command  file  name.   The
  2973.       "@node@"  substitution  operator  can  be  used to pass the TSX line
  2974.       number  as  an  argument  to  the  command   file.    The   @userid@
  2975.       substitution  operator  passes the user's BBS identification number.
  2976.       Each user has  a  unique  identification  number.   The  "@tempdir@"
  2977.       substitution  operator can be used to pass the name of the temporary
  2978.       directory where the DOOR.SYS file  is  created.   For  example,  the
  2979.       following    example    executes   a   door   command   file   named
  2980.       "c:\chess\pchess.cmd" and passes the line number and temporary  file
  2981.       directory as arguments:
  2982.  
  2983.            $item key=C action=door("c:\chess\pchess.cmd @node@ @tempdir@")
  2984.  
  2985.       Chapter 5. Menu Compiler                                          47
  2986.  
  2987.  
  2988.       See  Section  14.4  on  page  136  for  more  details about the door
  2989.       action.
  2990.  
  2991.       5.7.3.15 download -- Download a file
  2992.  
  2993.       The download action downloads a file from  the  BBS  to  the  user's
  2994.       computer.  The form of the action is
  2995.  
  2996.            action=download(filename)
  2997.  
  2998.       where   'filename'   is   the  specification  for  the  file  to  be
  2999.       downloaded.  For example, the following action  downloads  the  file
  3000.       "bbs:filelist.dat":
  3001.  
  3002.            action=download(bbs:filelist.dat)
  3003.  
  3004.       5.7.3.16 exit -- Exit from menus
  3005.  
  3006.       The  exit  action causes the current set of menus to exit and return
  3007.       control to the TPL program that invoked them.  When the exit  action
  3008.       is  performed control returns to the invoking TPL program regardless
  3009.       of the current menu call nesting depth.  The form of the action is
  3010.  
  3011.            action=exit
  3012.  
  3013.       5.7.3.17 fallist -- Display file area list
  3014.  
  3015.       The fallist action displays a list of file areas.  The form  of  the
  3016.       action is
  3017.  
  3018.            action=fallist(falname,heading)
  3019.  
  3020.       where  'falname'  is  the  name  of the FAL file containing the area
  3021.       descriptions and 'heading' is a string to be displayed  at  the  top
  3022.       of  the  selection list.  For example, the following action displays
  3023.       a list of files described by the "bbs:master.fal"  file  and  prints
  3024.       "All file areas" as the title:
  3025.  
  3026.            action=fallist(bbs:master,"All file areas")
  3027.  
  3028.       See  Chapter  7  for  additional  information  about setting up file
  3029.       areas.
  3030.  
  3031.       5.7.3.18 falsearch -- Search file descriptions
  3032.  
  3033.       The falsearch action invokes the BBS subsystem  that  searches  file
  3034.       descriptions  for  a  text string that the user enters.  This action
  3035.       performs "global" searches that span multiple file sets.   The  form
  3036.       of this action is
  3037.  
  3038.            action=falsearch(falname,heading)
  3039.  
  3040.       where  'falname'  is the name of the FAL file containing the list of
  3041.       files (and/or subareas) that are to be searched, and 'heading' is  a
  3042.       string  to  be  displayed  during  the  search.   For  example,  the
  3043.  
  3044.       Chapter 5. Menu Compiler                                          48
  3045.  
  3046.  
  3047.       following action searches all files defined  by  the  bbs:master.fal
  3048.       fal file and displays "All file areas" as the search heading:
  3049.  
  3050.            action=falsearch(bbs:master,"All file areas")
  3051.  
  3052.       5.7.3.19 fdllist -- List files in an FDL
  3053.  
  3054.       The  fdllist  action  causes the BBS to list the descriptions of the
  3055.       files in a specified File Description List (FDL) that is part  of  a
  3056.       File  Area  List  (FAL).   The specified FAL file must have an entry
  3057.       for the specified FDL file.  As the names are  listed  the  user  is
  3058.       provided  options such as tagging, downloading, searching, etc.  The
  3059.       form of the action is
  3060.  
  3061.            action=fdllist(falname,fdlname)
  3062.  
  3063.       where 'falname' is the name of the FAL file  and  'fdlname'  is  the
  3064.       name  of  the FDL file.  For example, the following action lists all
  3065.       files in the bbs:swim.fdl file that is part  of  the  bbs:master.fal
  3066.       area:
  3067.  
  3068.            action=fdllist(bbs:master,bbs:swim)
  3069.  
  3070.       5.7.3.20 fdlsearch -- Search through file list
  3071.  
  3072.       The  fdlsearch  action prompts the user to enter a word or phrase to
  3073.       search for and then searches through  the  file  descriptions  in  a
  3074.       specified  FDL  file  that  is  part of a specified FAL area.  Files
  3075.       that  have  the  matching  word  or  phrase  in   their   names   or
  3076.       descriptions  are  listed and the user may tag and/or download them.
  3077.       The form of the action is
  3078.  
  3079.            action=fdlsearch(falname,fdlname)
  3080.  
  3081.       where 'falname' is the name of the FAL file area file and  'fdlname'
  3082.       is  the name of the file description file.  This action differs from
  3083.       the  falsearch  action  in  that   falsearch   searches   all   file
  3084.       descriptions  that  are  in  all  file  sets  and subcategories of a
  3085.       specified category, whereas  fdlsearch  searches  only  a  specified
  3086.       file set.
  3087.  
  3088.       5.7.3.21 fdlupload -- Upload a file
  3089.  
  3090.       The  fdlupload  action begins a sequence that prompts the user for a
  3091.       file name and description and then uploads the file to the  bulletin
  3092.       board  and  enters  the  description into a specified FDL file.  The
  3093.       form of the action is
  3094.  
  3095.            action=fdlupload(falname,fdlname)
  3096.  
  3097.       where 'falname' is the name of a File  Area  List  (FAL)  file  that
  3098.       includes  the  FDL  file,  and  'fdlname'  is  the  name  of  a File
  3099.       Description List (FDL) file into which the description for the  file
  3100.       being  uploaded is stored.  For example, the following action begins
  3101.  
  3102.       Chapter 5. Menu Compiler                                          49
  3103.  
  3104.  
  3105.       an  upload.   The  file  description  is  placed  in  a  file  named
  3106.       "bbs:newfiles.fdl".  The File Area List (FAL) is "bbs:master.fal".
  3107.  
  3108.            action=fdlupload(bbs:master,bbs:newfiles)
  3109.  
  3110.       5.7.3.22 fmpmenu -- Display file transfer protocol menu
  3111.  
  3112.       The  fmpmenu  action  displays a menu from which the user can select
  3113.       the file transfer protocol (X-modem,  Y-modem,  or  Z-modem)  to  be
  3114.       used for subsequent file transfers.  The form of the action is
  3115.  
  3116.            action=fmpmenu
  3117.  
  3118.       5.7.3.23 fmpset -- Set file transfer protocol
  3119.  
  3120.       The  fmpset  action  sets the file transfer protocol for the current
  3121.       user.  The form of the action is
  3122.  
  3123.            action=fmpset(name)
  3124.  
  3125.       where 'name' is XMODEM, YMODEM, or ZMODEM.
  3126.  
  3127.       5.7.3.24 forumcheck -- Check for pending forum messages
  3128.  
  3129.       The forumcheck action checks to see  if  the  user  has  any  unread
  3130.       forum  messages.   If  so,  it allows the user to read the messages.
  3131.       The form of the action is:
  3132.  
  3133.            action=forumcheck(notify)
  3134.  
  3135.       The 'notify' argument controls how the action prompts the user.   It
  3136.       can have three values:
  3137.  
  3138.       0  -- If the user has pending messages, a message is printed telling
  3139.           the user about this and asking the user if he or  she  wants  to
  3140.           read  the  messages.   If  there  are  no  pending messages, the
  3141.           action does nothing and no message is printed.
  3142.  
  3143.       1 -- Operates the same as value 0 except if  there  are  no  pending
  3144.           messages  a  message  is printed telling the user that there are
  3145.           no pending messages.
  3146.  
  3147.       2 -- If  the  user  has  pending  messages,  the  first  message  is
  3148.           immediately  displayed  without  asking  the  user  if he or she
  3149.           wants to read it.  If there are no pending messages,  a  message
  3150.           is printed telling the user that there are no pending messages.
  3151.  
  3152.       5.7.3.25 frmalist -- Display alphabetic list of forums
  3153.  
  3154.       The  frmalist  action  begins  forum  processing.   It  displays the
  3155.       current list of forums in alphabetical order.  This is  one  of  the
  3156.       primary  ways  that  the  users  see  the forum list.  It accepts an
  3157.       optional argument which is allows the sysop to restrict the  display
  3158.       to certain grand divisions or other names.
  3159.  
  3160.       Chapter 5. Menu Compiler                                          50
  3161.  
  3162.  
  3163.       The forum of the action is
  3164.  
  3165.            action=frmalist([rootname])
  3166.  
  3167.       If  the rootname argument is not specified then all forums which the
  3168.       user has  read  access  to  will  be  displayed.   If  the  rootname
  3169.       argument  is  "usenet",  for example, this display would only select
  3170.       forums which began with "usenet".   The  name  can  be  as  long  as
  3171.       desired;  the  rootname  argument  "usenet.comp.ibm.hardware"  would
  3172.       restrict    the    display    to    forums    which    begin    with
  3173.       "usenet.comp.ibm.hardware".
  3174.  
  3175.       5.7.3.26 frmdownload -- Downloaded selected messages
  3176.  
  3177.       The   frmdownload   action   initiates  download  processing  for  a
  3178.       previously selected list of items.  This is  not  the  same  as  QWK
  3179.       processing.   QWK  processing involves logging on, cycling through a
  3180.       preselected list of forums, collecting new  messages  and  uploading
  3181.       replies, and logging off.
  3182.  
  3183.       There  is  another  way  to  download  a  message or messages.  When
  3184.       viewing messages and topics interactively the  user  is  allowed  to
  3185.       tag  topics  and  messages for download.  Each of these tagged items
  3186.       is placed on a list of items to be downloaded later.
  3187.  
  3188.       The user can select a number of messages in  various  forums.   This
  3189.       occurs  interactively,  not  on  a batch basis like QWK.  The forums
  3190.       need not be QWK forums.  Once the user  is  finished  this  function
  3191.       allows the user to download the selected items.
  3192.  
  3193.       The form of the action is
  3194.  
  3195.            action=frmdownload()
  3196.  
  3197.       5.7.3.27 frmenter -- Enter the forum name hierarchy
  3198.  
  3199.       The  frmenter  action  allows  the  user  to invoke the hierarchical
  3200.       forum display.  This display shows the forum  names  in  categorical
  3201.       form.   In  this  display  the users can view the names at a certain
  3202.       level in the category and move up and down to different  categorical
  3203.       levels.   The optional argument allows the sysop to specify the base
  3204.       of the display.  The form of the action is
  3205.  
  3206.            action=frmenter([rootname])
  3207.  
  3208.       If a rootname argument is not specified the display  will  initially
  3209.       consist  of  the set of grand division names which the user has read
  3210.       access to.  If the rootname argument is "usenet", for example,  this
  3211.       display  would  consist of the entries under "usenet".  The name can
  3212.       be as long as desired; the rootname argument
  3213.       "usenet.comp.ibm.hardware" would  restrict  the  display  to  forums
  3214.       under "usenet.comp.ibm.hardware".
  3215.  
  3216.       Chapter 5. Menu Compiler                                          51
  3217.  
  3218.  
  3219.       5.7.3.28 frmgetlist -- Download list of forums
  3220.  
  3221.       The  frmgetlist  action  allows the user to download a list of forum
  3222.       names.  The form of the action is
  3223.  
  3224.            action=frmgetlist([rootname])
  3225.  
  3226.       The list will be in an ascii file and will contain  the  forum  name
  3227.       as  well  as  the  forum  number.   The list will only contain forum
  3228.       names which the user has read access to.  The user may download  the
  3229.       file  as  an  ascii  or  compressed  file  and  is prompted for this
  3230.       choice.
  3231.  
  3232.       There is an optional argument which can restrict  which  forums  can
  3233.       be  selected for listing.  If the rootname argument is not specified
  3234.       then  all  forums  which  the  user  has  read  access  to  will  be
  3235.       collected.   Otherwise  only  those forums which begin with the root
  3236.       name and which the user has read access to will be collected.
  3237.  
  3238.       If the rootname argument  is  "usenet",  for  example,  this  action
  3239.       would  only collect forum names which began with "usenet".  The name
  3240.       can   be   as   long   as    desired;    the    rootname    argument
  3241.       "usenet.comp.ibm.hardware"  would  collect  forums  which begin with
  3242.       "usenet.comp.ibm.hardware".
  3243.  
  3244.       5.7.3.29 frmslist -- Search for list of forums
  3245.  
  3246.       The frmslist action allows the user to search for a  set  of  forums
  3247.       whose  names  contain  certain  specified  keywords.   The  user  is
  3248.       prompted for a search expression.  This search  expression  is  used
  3249.       as  the  basis  for  the  search.   The  resulting  list can then be
  3250.       browsed in the same way that the hierarchical or  alphabetical  list
  3251.       can be browsed.
  3252.  
  3253.       There  is  an optional argument which is the root name to be used in
  3254.       the search.  This allows the sysop to restrict searches  to  certain
  3255.       grand divisions or other categories.
  3256.  
  3257.       If  the  rootname  argument  is  "usenet", for example, this display
  3258.       would consist of the entries under "usenet"  which  also  match  the
  3259.       search  string.   The  name  can be as long as desired; the rootname
  3260.       argument "usenet.comp.ibm.hardware" would restrict  the  display  to
  3261.       forums  under "usenet.comp.ibm.hardware" which also match the search
  3262.       string.
  3263.  
  3264.       The form of the action is
  3265.  
  3266.            action=frmhlist([rootname])
  3267.  
  3268.       Chapter 5. Menu Compiler                                          52
  3269.  
  3270.  
  3271.       5.7.3.30 frmentnum -- Enter a forum by number
  3272.  
  3273.       The frmentnum action allows the user to enter  a  forum  by  number.
  3274.       If  no  argument  is  specified  the  user is prompted for the forum
  3275.       number to enter.  The forum number can be specified as  an  argument
  3276.       to  allow the sysop to define an action which will enter a specified
  3277.       forum number with no additional user intervention.  The form of  the
  3278.       action is
  3279.  
  3280.            action=frmentnum([number])
  3281.  
  3282.       5.7.3.31 frmentname -- Enter a forum by name
  3283.  
  3284.       The  frmentname action allows the user to enter a forum by name.  If
  3285.       no argument is specified the user is prompted for the forum name  to
  3286.       enter.   The forum name can be specified as an argument to allow the
  3287.       sysop to define an action which will enter a  specified  forum  name
  3288.       with no additional user intervention.  The form of the action is
  3289.  
  3290.            action=frmentname([name])
  3291.  
  3292.       5.7.3.32 frmprefix -- Enter forum by name with prefix
  3293.  
  3294.       The  frmprefix  action  is  similar  to the frmentname action except
  3295.       that it allows a an optional prefix to be specified  by  the  sysop.
  3296.       This  string  is  prepended to the name specified by the user.  This
  3297.       is useful for allowing the user  to  enter  a  named  forum  without
  3298.       typing  in  the entire name.  The difference between the two is that
  3299.       frmprefix always prompts the user while frmentname will  not  prompt
  3300.       the  user  if a name is specified.  Using frmprefix without a prefix
  3301.       is identical to using frmentname without an  argument;  both  prompt
  3302.       the user for the full forum name.
  3303.  
  3304.       The form of the action is
  3305.  
  3306.            action=frmprefix([prefix])
  3307.  
  3308.       5.7.3.33 frmqwkman -- Manage QWK forum list
  3309.  
  3310.       The  frmqwkman  action  displays  a list of the forums that the user
  3311.       has currently selected for QWK downloads and allows the user to  add
  3312.       and delete forums.  The form of the action is:
  3313.  
  3314.            action=frmqwkman
  3315.  
  3316.       5.7.3.34 ftp -- Invoke Internet FTP File Transfer Program
  3317.  
  3318.       The  ftp  action  invokes  the  FTP (File Transfer Protocol) program
  3319.       used for sending and receiving  files  through  the  Internet.   The
  3320.       form of the action is
  3321.  
  3322.            actin=ftp([command_file])
  3323.  
  3324.       where  the 'command_file' argument is optional.  If specified, it is
  3325.       the name of a file with FTP commands  that  are  executed  when  FTP
  3326.  
  3327.       Chapter 5. Menu Compiler                                          53
  3328.  
  3329.  
  3330.       starts  running.   If this argument is omitted, the user is prompted
  3331.       to enter the name of the host site to be  accessed,  the  user  name
  3332.       and the password to use for the logon.
  3333.  
  3334.       5.7.3.35 logoff -- Log off the BBS
  3335.  
  3336.       The  logoff  action records usage information about the current user
  3337.       in the appropriate accounting files, logs the user off the BBS,  and
  3338.       hangs up the phone line.  The form of the action is
  3339.  
  3340.            action=logoff
  3341.  
  3342.       5.7.3.36 logwrite -- Write message to BBS log file
  3343.  
  3344.       The  logwrite  action  writes  a  message  to the BBS log file named
  3345.       "bbs:bbs.log".  The form of the action is
  3346.  
  3347.            action=logwrite(message)
  3348.  
  3349.       This function is frequently used with another  action  by  combining
  3350.       the  two  actions  as  described in Section 5.7.3.1 on page 43.  For
  3351.       example, the following command writes a log entry and  then  invokes
  3352.       a sub-menu named "business".
  3353.  
  3354.            $item key=B action=(Entering business);menu(business)
  3355.  
  3356.       5.7.3.37 mailabook -- Manage address book
  3357.  
  3358.       The  mailabook  action invokes the address book management functions
  3359.       of the BBS e-mail system.  The user is presented with a screen  that
  3360.       allows  him  to  add,  delete,  and alter address book entries.  The
  3361.       form of the action is
  3362.  
  3363.            action=mailabook
  3364.  
  3365.       5.7.3.38 mailbrowse -- Browse message base
  3366.  
  3367.       The mailbrowse menu action is  intended  to  be  used  only  by  the
  3368.       sysop.   It  presents  the  contents of any message base in the same
  3369.       format as that used for the mail  filing  cabinet.   However,  every
  3370.       non  deleted message in the message base is shown, regardless of the
  3371.       sender or recipient.
  3372.  
  3373.       5.7.3.39 mailcheck -- Check for pending mail messages
  3374.  
  3375.       The mailcheck action checks to  see  if  the  user  has  any  unread
  3376.       E-mail  messages.   If  so, it allows the user to read the messages.
  3377.       The form of the action is:
  3378.  
  3379.            action=mailcheck(notify)
  3380.  
  3381.       The 'notify' argument controls how the action prompts the user.   It
  3382.       can have three values:
  3383.  
  3384.       Chapter 5. Menu Compiler                                          54
  3385.  
  3386.  
  3387.       0  -- If the user has pending messages, a message is printed telling
  3388.           the user about this and asking the user if he or  she  wants  to
  3389.           read  the  messages.   If  there  are  no  pending messages, the
  3390.           action does nothing and no message is printed.
  3391.  
  3392.       1 -- Operates the same as value 0 except if  there  are  no  pending
  3393.           messages  a  message  is printed telling the user that there are
  3394.           no pending messages.
  3395.  
  3396.       2 -- If  the  user  has  pending  messages,  the  first  message  is
  3397.           immediately  displayed  without  asking  the  user  if he or she
  3398.           wants to read it.  If there are no pending messages,  a  message
  3399.           is printed telling the user that there are no pending messages.
  3400.  
  3401.       5.7.3.40 mailfile -- Manage filing cabinet
  3402.  
  3403.       The  mailfile action invokes the filing cabinet management functions
  3404.       of the BBS e-mail system.  The user is presented with a screen  that
  3405.       allows  him  to  add,  delete, and read filed messages.  The form of
  3406.       the action is
  3407.  
  3408.            action=mailfile
  3409.  
  3410.       5.7.3.41 mailrecv -- Receive messages
  3411.  
  3412.       The mailrecv action invokes the  BBS  mail  receive  subsystem  that
  3413.       allows  the  user to browse through and read pending incoming e-mail
  3414.       messages.  The form of the action is
  3415.  
  3416.            action=mailrecv
  3417.  
  3418.       5.7.3.42 mailsend -- Send a message
  3419.  
  3420.       The mailsend action invokes  the  BBS  subsystem  that  accepts  and
  3421.       sends  an  e-mail message.  The user is prompted for the recipient's
  3422.       name and subject and then the mail composition editor is invoked  to
  3423.       accept the message to be sent.  The form of the action is
  3424.  
  3425.            action=mailsend
  3426.  
  3427.       5.7.3.43 mailsyn -- Manage synonymous names
  3428.  
  3429.       The  mailsyn action invokes the synonymous name management functions
  3430.       of the BBS e-mail system.  The user is presented with a screen  that
  3431.       allows  him  to  add,  delete,  and alter his synonymous mail names.
  3432.       The form of the action is
  3433.  
  3434.            action=mailsyn
  3435.  
  3436.       Chapter 5. Menu Compiler                                          55
  3437.  
  3438.  
  3439.       5.7.3.44 mailsysop -- Send message to sysop
  3440.  
  3441.       The mailsysop action invokes  the  BBS  mail  subsystem  to  send  a
  3442.       message  to  the sysop.  The sysop's name is automatically specified
  3443.       as the recipient of the message.  The  mail  composition  editor  is
  3444.       invoked  to  accept  the message to be sent.  The form of the action
  3445.       is
  3446.  
  3447.            action=mailsysop
  3448.  
  3449.       5.7.3.45 menu -- Call a menu
  3450.  
  3451.       This action invokes a submenu.  The form of the action is
  3452.  
  3453.            action=menu(menu_name)
  3454.  
  3455.       where "menu_name" is the file  specification  for  the  menu  to  be
  3456.       invoked.   You  should  specify  the  device  and directory with the
  3457.       name.  The default extension is  ".TMU".   Control  returns  to  the
  3458.       calling  menu  when  the  called menu executes a return action.  For
  3459.       example,  the  following  action   invokes   a   menu   file   named
  3460.       "\bbs\files.tmu":
  3461.  
  3462.            action=menu(\bbs\files)
  3463.  
  3464.       5.7.3.46 menujump -- Jump to a menu
  3465.  
  3466.       The form of the menujump action is
  3467.  
  3468.            action=menujump(menu_name)
  3469.  
  3470.       where  "menu_name"  is  the  file  specification  for the menu to be
  3471.       invoked.  You should specify  the  device  and  directory  with  the
  3472.       name.  The default extension is ".TMU".
  3473.  
  3474.       The  menujump  action  is  very  similar  to the "menu" action -- it
  3475.       invokes another menu.  The difference  is  that  the  'menu'  action
  3476.       calls  a  menu in such a way that when the called menu exits control
  3477.       returns to the calling menu whereas menujump  transfers  control  to
  3478.       the  specified menu without setting up return information.  When the
  3479.       menu that is being entered executes a 'return'  action,  control  is
  3480.       transfered  to  any  higher  level menu rather than returning to the
  3481.       menu that did the menujump  action.   In  essence,  the  menu  being
  3482.       entered  is  considered  to  be a continuation of the menu executing
  3483.       the menujump action.
  3484.  
  3485.       For example, assume there are three menus  named  m1,  m2,  and  m3.
  3486.       The  m1  menu  uses  the 'menu' action to call m2.  The m2 menu uses
  3487.       the menujump action to invoke  m3.   When  m3  executes  a  'return'
  3488.       action,  control  returns  to  m1  rather than m2.  If, on the other
  3489.       hand, m2 had used a  'menu'  action  to  invoke  m3,  then  when  m3
  3490.       returned control would go back to m2.
  3491.  
  3492.       Chapter 5. Menu Compiler                                          56
  3493.  
  3494.  
  3495.       5.7.3.47 namesel -- Select files for download by name
  3496.  
  3497.       The  namesel  action  prompts  the  user to enter the name of a file
  3498.       that is to be selected for downloading.   The  user  is  allowed  to
  3499.       enter multiple names.  The form of the action is
  3500.  
  3501.            action=namesel([falname[,fdlname]])
  3502.  
  3503.       where  the  optional 'falname' argument is the name of the FAL (file
  3504.       area list) file that describes the areas to be searched.  If you  do
  3505.       not  specify  any  arguments,  BBS:MASTER.FAL is used as the default
  3506.       FAL file name.
  3507.  
  3508.       The second argument, 'fdlname', is also  optional.   If  it  is  not
  3509.       specified,  all  files  in  all  areas described by the FAL file are
  3510.       searched.  If you specify an FAL and FDL file,  only  files  in  the
  3511.       area  described  by the FDL are searched.  For example, to allow the
  3512.       user to search for a file in all areas simply use the menu item:
  3513.  
  3514.            action=namesel
  3515.  
  3516.       To search only the files in the BBS:IBMUTIL.FAL area that  is  under
  3517.       the BBS:MASTER.FAL file, use the following action:
  3518.  
  3519.            action=namesel(BBS:MASTER.FAL,BBS:IBMUTIL.FAL)
  3520.  
  3521.       5.7.3.48 offcheck -- Confirm and then logoff
  3522.  
  3523.       The  offcheck  action is very similar to the logoff action that logs
  3524.       a user off.  The difference is that logoff  does  an  immediate  log
  3525.       off  whereas  offcheck  prints a message of the form "Do you want to
  3526.       log off?  (Y/N):" and allows the user to enter 'Y' or 'N'.   If  the
  3527.       user  enters  'Y', or presses Enter, the user is logged off.  If the
  3528.       user enters 'N' he is not logged off.
  3529.  
  3530.            action=offcheck
  3531.  
  3532.       5.7.3.49 offquiet -- Log off without message
  3533.  
  3534.       The offquiet action logs the user off without displaying  the  usual
  3535.       message  telling the user how much time he has used.  It is a silent
  3536.       logoff.
  3537.  
  3538.       5.7.3.50 pagesysop -- Page the sysop
  3539.  
  3540.       The pagesysop action sends paging messages to the  console  terminal
  3541.       to  notify  the  BBS  sysop  that  a  user would like to engage in a
  3542.       conversation.  The "chat" function of  the  dashboard  menu  of  the
  3543.       SYSOP  program  can  be  used  to  respond  to a page and commence a
  3544.       conversation.  The pagesysop function checks to  see  if  the  sysop
  3545.       has  disabled paging and, if so, notifies the user without sending a
  3546.       paging message.  If you wish to disallow sysop paging  entirely,  it
  3547.       is best to not offer a paging menu choice.
  3548.  
  3549.       Chapter 5. Menu Compiler                                          57
  3550.  
  3551.  
  3552.       5.7.3.51 pause -- Display a string and pause
  3553.  
  3554.       The  pause action displays a string on the user's screen followed by
  3555.       by the message "-press a key to continue-".  The form of the  action
  3556.       is
  3557.  
  3558.            action=pause(string)
  3559.  
  3560.       where  "string"  is  the  text string to be displayed.  For example,
  3561.       the following $item command displays "You  are  not  privileged  for
  3562.       this" when the user types 'A'.
  3563.  
  3564.            $item key=A action=pause(You are not privileged for this)
  3565.  
  3566.       You  may  omit  the  argument string in which case the action prints
  3567.       only the "-press a key to continue-" message.
  3568.  
  3569.       5.7.3.52 print -- Display a string
  3570.  
  3571.       The print action is equivalent to the display action.  The  form  of
  3572.       the action is:
  3573.  
  3574.            action=print(string)
  3575.  
  3576.       5.7.3.53 pws -- Manage personal file workspace
  3577.  
  3578.       The  pws  action  invokes a browse screen showing the files that are
  3579.       currently stored in the  user's  "personal  file  workspace".   This
  3580.       workspace  is used as a repository for files being send and received
  3581.       using FTP and it can also be used as a general  file  storage  area.
  3582.       See  Chapter  8  for  additional  information  about  personal  file
  3583.       workspaces.  The form of the action is
  3584.  
  3585.            action=pws
  3586.  
  3587.       5.7.3.54 qwkcfg -- Set QWK configuration options
  3588.  
  3589.       The qwkcfg menu action displays a menu and allows the  user  to  set
  3590.       QWK  configuration options such as whether they want e-mail messages
  3591.       downloaded.   The  text  of  the  menu  is  stored   in   the   file
  3592.       bbsbin:qwkcfg.mnu.   You may alter it and alter the entry in the BBS
  3593.       language phrase file with the label QWKCFG.  The form of the  action
  3594.       is:
  3595.  
  3596.            action=qwkcfg
  3597.  
  3598.       5.7.3.55 qwkdownload -- Download QWK packet with messages
  3599.  
  3600.       The  qwkdownload action causes the TSX-BBS QWK system to collect all
  3601.       messages from QWK selected forums, create a compressed  packet,  and
  3602.       download the packet to the user.  The form of the action is:
  3603.  
  3604.            action=qwkdownload(personal)
  3605.  
  3606.       Chapter 5. Menu Compiler                                          58
  3607.  
  3608.  
  3609.       where  the  'personal'  argument  is  optional.   If  the 'personal'
  3610.       argument is omitted or 0 is specified for it, all  messages  in  the
  3611.       selected  forums are downloaded.  If 1 is specified for the argument
  3612.       then only messages addressed to the user are downloaded.
  3613.  
  3614.       5.7.3.56 qwkservices -- Select services
  3615.  
  3616.       The qwkservices action allows  the  user  to  select  which  service
  3617.       files  are  to  be  included  in  downloaded QWK packets.  A menu is
  3618.       displayed showing each available service and  the  user  can  select
  3619.       which ones are wanted.  The form of the action is:
  3620.  
  3621.            action=qwkservices
  3622.  
  3623.       5.7.3.57 qwkupload -- Upload a QWK packet
  3624.  
  3625.       The  qwkupload  action  causes  TSX-BBS  to prompt the user to begin
  3626.       uploading a QWK packet with outgoing  messages.   The  form  of  the
  3627.       action is
  3628.  
  3629.            action=qwkupload
  3630.  
  3631.       5.7.3.58 qwkread -- Read new messages from forums
  3632.  
  3633.       The  qwkread action is a discussion forum action that begins reading
  3634.       all new messages that have been posted in forums  selected  for  QWK
  3635.       reading  by  the  user.   Note:  This  action  does  not cause a QWK
  3636.       download, it initiates on-line reading of the new messages in  those
  3637.       forums  that have been selected for QWK processing.  The form of the
  3638.       action is
  3639.  
  3640.            action=qwkread
  3641.  
  3642.       5.7.3.59 return -- Return from menu call
  3643.  
  3644.       The 'return' menu action causes the current  menu  to  exit  passing
  3645.       control  to the next higher level menu that invoked the current menu
  3646.       with a 'menu' action (see Section 5.7.3.45).  If the top  most  menu
  3647.       executes  a  'return'  action,  control is passed to the TPL program
  3648.       that invoked the top level menu just as  if  an  'exit'  action  had
  3649.       been invoked.
  3650.  
  3651.       5.7.3.60 setclass -- Change user class
  3652.  
  3653.       The  setclass  action changes the class of the current BBS user to a
  3654.       specified class.  The form of the action is
  3655.  
  3656.            action=setclass(class)
  3657.  
  3658.       where "class" is the class name.   The  SYSOP  program  is  used  to
  3659.       define   classes.    A   class  may  control  privileges  and  other
  3660.       attributes for the user.  When the setclass action is executed,  the
  3661.       privileges  and  other  parameters  are immediately changed to those
  3662.       associated with the named class.  The  user's  authorization  record
  3663.       is  also  changed  so  the  new privileges and other attributes will
  3664.  
  3665.       Chapter 5. Menu Compiler                                          59
  3666.  
  3667.  
  3668.       continue to be in  effect  for  future  logons.   For  example,  the
  3669.       following action changes the user class to "paid":
  3670.  
  3671.            action=setclass(paid)
  3672.  
  3673.       5.7.3.61 tagdl -- Download currently tagged files
  3674.  
  3675.       Displays  a  confirmation prompt and then begins downloading the set
  3676.       of files that the user has tagged.  The form of the action is:
  3677.  
  3678.            action=tagdl
  3679.  
  3680.       5.7.3.62 tagedit -- Edit the list of tagged files
  3681.  
  3682.       Display  a  list  of  the  files  that  the  user  has  tagged   for
  3683.       downloading  and  allows the user to edit the list.  The form of the
  3684.       action is:
  3685.  
  3686.            action=tagedit
  3687.  
  3688.       5.7.3.63 telnet -- Invoke Telnet Internet program
  3689.  
  3690.       The telnet action invokes the Telnet program that  is  used  to  log
  3691.       onto  remote computers through the Internet.  The form of the action
  3692.       is
  3693.  
  3694.            action=telnet
  3695.  
  3696.       5.7.3.64 top -- Return to top level menu
  3697.  
  3698.       The top menu action stops execution of the current menu  and  passes
  3699.       control  to  the  top  level menu.  The effect is the same as if the
  3700.       current menu executed a 'return' action and all  intermediate  level
  3701.       menus also returned until the highest level menu was reached.
  3702.  
  3703.       5.7.3.65 tpr -- Run TPL program
  3704.  
  3705.       The tpr action executes a TPL program.  The form of the action is
  3706.  
  3707.            action=tpr(program [arguments])
  3708.  
  3709.       where  'program'  is  the  name  of  the  program to be executed and
  3710.       'arguments' are optional argument strings to pass  to  the  program.
  3711.       Note  that  there  is  no  comma  between  the  program name and the
  3712.       optional argument strings.  The program name and optional  arguments
  3713.       should  be  specified  just  as  you would if you were using the TPL
  3714.       system command to execute the program.  For example,  the  following
  3715.       command runs a program named "cleanup":
  3716.  
  3717.            $item key=C action=tpr(\bbs\cleanup)
  3718.  
  3719.       The  following example runs a program named "cleanold" and passes in
  3720.       the argument string "30":
  3721.  
  3722.       Chapter 5. Menu Compiler                                          60
  3723.  
  3724.  
  3725.            $item key=O action=tpr(\bbs\cleanold 30)
  3726.  
  3727.       5.7.3.66 tsxcmd -- Execute TSX command
  3728.  
  3729.       The tsxcmd action executes a TSX command or command file.  The  form
  3730.       of the action is
  3731.  
  3732.            action=tsxcmd(command[,list])
  3733.  
  3734.       where  "command"  is  the  TSX  command  that  is to be executed and
  3735.       "list" has one of the following values:
  3736.  
  3737.       0 = Suppress all output generated by the execution of  the  command.
  3738.           The command is executed "silently".
  3739.  
  3740.       1  =  Allow  output  generated  by  the  command to be listed to the
  3741.           screen.
  3742.  
  3743.       2 = Allow output generated by  the  command  to  be  listed  to  the
  3744.           screen  and  display  a "-press a key to continue-" message when
  3745.           the command finishes.  If  you  omit  the  'list'  argument,  it
  3746.           defaults to 0.
  3747.  
  3748.       If  you wish to execute a command file rather than a single command,
  3749.       begin the command with  '@'.   For  example,  the  following  action
  3750.       would  delete  all files in a work directory that have the extension
  3751.       ".TMP":
  3752.  
  3753.            $item key=D action=tsxcmd("del \work\*.tmp")
  3754.  
  3755.       The   following   action   executes    a    command    file    named
  3756.       "\bbs\cleanup.cmd" and pauses at the end of the listing:
  3757.  
  3758.            $item key=L action=tsxcmd("\bbs\cleanup",2)
  3759.  
  3760.       5.7.3.67 upload -- Upload a file
  3761.  
  3762.       The  upload action uploads a file to the bulletin board system.  The
  3763.       form of the action is
  3764.  
  3765.            action=upload(filename)
  3766.  
  3767.       where 'filename' is the specification for the  file  that  is  being
  3768.       uploaded.   When  the  action  is  invoked,  the user is prompted to
  3769.       begin the upload.  This action is similar to  the  fdlupload  action
  3770.       described  in Section 5.7.3.21.  The difference is that fdlupload is
  3771.       used to upload a file to the BBS files area and enter the file  name
  3772.       and  description  into  a  FDL  description file, whereas the upload
  3773.       action simply uploads a file but does not make it part  of  the  BBS
  3774.       file  system.   For  example,  the  following  action uploads a file
  3775.       named "\data\daily.dat":
  3776.  
  3777.            action=upload(\data\daily.dat)
  3778.  
  3779.       Chapter 5. Menu Compiler                                          61
  3780.  
  3781.  
  3782.       5.7.3.68 useroptions -- Change user options
  3783.  
  3784.       The useroptions action invokes the BBS  operation  that  displays  a
  3785.       list  of user-changeable options such as password, chat handle, ANSI
  3786.       support, color, etc.  and allows the user  to  change  the  options.
  3787.       The form of the action is
  3788.  
  3789.            action=useroptions
  3790.  
  3791.       5.7.3.69 vote -- Enter voting system
  3792.  
  3793.       The  vote action enters the BBS subsystem that is used to record and
  3794.       display user votes on issues the  sysop  sets  up.   See  the  SYSOP
  3795.       manual for information about defining voting issues.
  3796.  
  3797.  
  3798.       5.8 $initial -- Initial action item
  3799.  
  3800.       The   $initial   menu   item   specifies  actions  to  be  performed
  3801.       automatically when the menu is  first  entered.   The  form  of  the
  3802.       $initial command is
  3803.  
  3804.            $initial action=keyword
  3805.  
  3806.       where  'keyword'  is  an  action keyword.  You may specify more than
  3807.       one $initial command in a menu.  You may also use "if()" clauses  to
  3808.       control   which   $initial   items  are  to  be  executed  based  on
  3809.       conditional  expressions.   For  example,  the  following   $initial
  3810.       command  sets the current activity description for the user to "Main
  3811.       menu":
  3812.  
  3813.            $initial action=actname(Main menu)
  3814.  
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.                                    Chapter 6
  3821.  
  3822.                          Logon and Callback Procedures
  3823.  
  3824.  
  3825.  
  3826.  
  3827.       TSX-BBS comes with  standard  user  logon  and  callback  procedures
  3828.       which  are documented in this chapter.  These procedures are written
  3829.       in the TPL programming language  and  the  source  files  for  these
  3830.       procedures  are  included  in  the files LOGON.TPL and CALLBACK.TPL.
  3831.       If  you  have  purchased  the  TPL  compiler,  you  can  modify  and
  3832.       recompile these procedures if they do not fit your needs.
  3833.  
  3834.  
  3835.       6.1 Logon Procedure
  3836.  
  3837.       The TSX-BBS system is started by executing the command:
  3838.  
  3839.            BBSBIN:BBSRUN BBSBIN:LOGON
  3840.  
  3841.       This  executes  the  BBSRUN.EXP  program  that  is  in  the  BBSBIN:
  3842.       directory and causes it to  execute  the  LOGON.TPR  TPL  executable
  3843.       file.  The logon procedure performs the following steps:
  3844.  
  3845.       1.  It  checks for the existence of a BBS:WELCOME.MSG file.  If such
  3846.           a file exists, it displays it as a logon  greeting.   This  file
  3847.           could  contain  an  ANSI  display  with  your  BBS name in block
  3848.           letters, etc.  You may use substitution operators  in  the  file
  3849.           such  as described in Chapter 3.  If there is no BBS:WELCOME.MSG
  3850.           file, TSX-BBS displays  "Thanks  for  calling  @bbsname@"  where
  3851.           "@bbsname@" is replaced by the name of your bulletin board.
  3852.  
  3853.       2.  The  user  is  then prompted to enter his first name, last name,
  3854.           and password.  The first name and last  name  may  be  specified
  3855.           together  on  the first name line by separating them with either
  3856.           a space or a semicolon.
  3857.  
  3858.       3.  If the user name is recognized but the password is invalid,  the
  3859.           user  is  given several chances to enter the right password.  If
  3860.           this is unsuccessful, TSX-BBS logs the user off.
  3861.  
  3862.       4.  If the user name is  not  recognized,  the  user  is  given  the
  3863.           choice of reentering the name or logging on as a new user.
  3864.  
  3865.       5.  If  the  user is logging on as a new user, TSX-BBS collects some
  3866.           basic information about the user including  his  address,  phone
  3867.           numbers,  number  of  lines per page, and color capability.  The
  3868.           class for a new user is set to BASIC.  You should use the  SYSOP
  3869.           program  to  set  the limits and privileges you want to grant to
  3870.  
  3871.  
  3872.                                        62
  3873.  
  3874.       Chapter 6. Logon and Callback Procedures                          63
  3875.  
  3876.  
  3877.           new users.  See  Section  15.2.4  on  page  145  for  additional
  3878.           information about user classes.
  3879.  
  3880.       6.  If  callback verification has been enabled by the sysop, and the
  3881.           user has not yet been verified, then the callback  procedure  is
  3882.           invoked as describe in Section 6.2 starting on page 63.
  3883.  
  3884.       7.  If  the  user's  account  has an expiration date and the account
  3885.           has expired, the user's class is changed to  EXPIRED  which  may
  3886.           reduce  the  user's  privileges  and limits.  You should use the
  3887.           SYSOP program to set the  limits  and  privileges  you  want  to
  3888.           grant  to  expired  users.   See  Section  15.2.4 for additional
  3889.           information about user classes.
  3890.  
  3891.       8.  A greeting message is displayed telling the user how  much  time
  3892.           he has available during the current session.
  3893.  
  3894.       9.  TSX-BBS  checks for the existance of a file named BBS:DAILY.MSG.
  3895.           If the file exists and this is the first time that the user  has
  3896.           logged on this day, the file is displayed.
  3897.  
  3898.       10. TSX-BBS  checks  for the existence of files named BBS:NEWS1.MSG,
  3899.           BBS:NEWS2.MSG, BBS:NEWS3.MSG, BBS:NEWS4.MSG, and  BBS:NEWS5.MSG.
  3900.           If  any  of these files exist, and the last modification date is
  3901.           more recent than the time when the  user  last  logged  on,  the
  3902.           file is displayed to the user.
  3903.  
  3904.       11. If  the  user's  class  is  BASIC  or  VERIFIED and a file named
  3905.           BBS:REGISTER.MSG exists, the file is displayed.  The  sysop  can
  3906.           place  a  message in this file encouraging users to subscribe to
  3907.           the bulletin board.
  3908.  
  3909.  
  3910.       6.2 Callback Verification
  3911.  
  3912.       Many  bulletin  boards  like  to  perform  a  callback  verification
  3913.       procedure  for  new  users.  This procedure causes TSX-BBS to hangup
  3914.       and call the user's computer to verify that  the  user  is  actually
  3915.       located  at  the  number  that they provided during the registration
  3916.       procedure.  There are two reasons for doing callback verification:
  3917.  
  3918.       1.  The procedure assures the sysop that he  knows  the  real  phone
  3919.           number  that  the  user called from.  This is useful in case the
  3920.           user engages in malicious actions and the sysop wants to  locate
  3921.           the  user.   Frequently,  the fact that users are aware that the
  3922.           sysop  knows  their  real  phone  numbers  is  enough  to  deter
  3923.           improper actions.
  3924.  
  3925.       2.  TSX-BBS  callback procedure stores the user's modem phone number
  3926.           in the user authorization record  and  will  not  allow  another
  3927.           user  to register the same phone number.  This prevents the same
  3928.           user from registering multiple times with  different  names  but
  3929.           the  same  modem phone number.  This is especially important for
  3930.           systems that allow access without a paid registration.
  3931.  
  3932.       Chapter 6. Logon and Callback Procedures                          64
  3933.  
  3934.  
  3935.           If  you  wish  to  allow  a  second  user  to  perform  callback
  3936.           verification  with  the same phone number, you can use the SYSOP
  3937.           program to modify the first user's entry and  remove  the  modem
  3938.           phone  number.   A  second  user  will  then be able to register
  3939.           using that number.
  3940.  
  3941.       When the  callback  verification  procedure  runs  it  performs  the
  3942.       following steps:
  3943.  
  3944.       1.  Ask  the  user  if he wants to do callback verification.  If the
  3945.           user says "no", then verification is not  done  and  the  user's
  3946.           access   class  is  left  as  BASIC.   The  user  is  given  the
  3947.           opportunity to send a message to the  sysop  explaining  why  he
  3948.           did not do callback verification.
  3949.  
  3950.       2.  If  the  user has less than 5 minutes of available connect time,
  3951.           his time limit is increased to 5 minutes to allow time  for  the
  3952.           callback verification to be done.
  3953.  
  3954.       3.  If  the  user  did  not  specify  a  modem  phone number when he
  3955.           registered, the callback procedure asks  the  user  to  enter  a
  3956.           modem phone number.
  3957.  
  3958.       4.  The  CALLBACK.DAT  file  is  used  to  clean up and validate the
  3959.           phone number.  This procedure is described in Section 6.2.2.
  3960.  
  3961.       5.  A check is made to see if the number is registered to any  other
  3962.           user.   If  so,  the  user  is not allowed to use the number for
  3963.           verification.  This prevents a user from registering  more  than
  3964.           once with different names.
  3965.  
  3966.       6.  A  message  is  displayed  telling the user that we are about to
  3967.           hang up and call him back.  He is  notified  that  he  can  type
  3968.           "ATA"  to  cause  the  modem  to  answer when he sees the "RING"
  3969.           message from the modem.
  3970.  
  3971.       7.  The phone is hung up and a delay is begun to give the modems  on
  3972.           both ends a chance to reset.
  3973.  
  3974.       8.  TSX-BBS  dials  the  number the user specified.  If it is unable
  3975.           to establish a connection it hangs up, pauses,  and  tries  once
  3976.           more.
  3977.  
  3978.       9.  If  a  connection is established, the user is asked to enter his
  3979.           password.  If a correct password cannot be  obtained,  the  user
  3980.           is  logged  off.   Once a valid password is received, the user's
  3981.           authorization  record  is  altered  to  indicate  that  callback
  3982.           verification  has been successfully completed.  The user's class
  3983.           is changed from BASIC to VERIFIED.
  3984.  
  3985.       10. If the user's number is long distance,  the  verification  hangs
  3986.           up  and allows the user to call the system again.  If the number
  3987.           is local, the callback does not hang up.
  3988.  
  3989.       Chapter 6. Logon and Callback Procedures                          65
  3990.  
  3991.  
  3992.       If  you  wish  to  use  callback  verification  but  do   not   want
  3993.       verification  done  for  a particular user, use the SYSOP program to
  3994.       modify the user's authorization entry  and  set  the  "Called  back"
  3995.       field  to  'Y'.  You should also change the user's class to VERIFIED
  3996.       or some other appropriate class.
  3997.  
  3998.       6.2.1 Setting up Callback Verification
  3999.  
  4000.       There are a couple of steps that you must perform  if  you  want  to
  4001.       use  callback verification.  First, start the SYSOP program and type
  4002.       'G' to select "General setup" from the  main  menu.   Then  position
  4003.       the  cursor  in  the field next to the "Callback verification" label
  4004.       and type 'Y'.  Press ESC twice to exit from SYSOP.
  4005.  
  4006.       6.2.2 The CALLBACK.DAT File
  4007.  
  4008.       The second step of setting up the callback procedure is to create  a
  4009.       control  file  with information about valid phone numbers.  The name
  4010.       of the control file is BBS:CALLBACK.DAT.  This  is  a  simple  ASCII
  4011.       file which you can create and modify using an ASCII editor.
  4012.  
  4013.       When  the  callback  procedure  runs, it begins by "cleaning up" the
  4014.       phone number that the user has entered.  This procedure removes  any
  4015.       characters  that  are  not digits.  For example, if the user entered
  4016.       "(615)327-3670", the clean  up  procedure  would  remove  non-digits
  4017.       resulting  in  the  number  "6153273670".   After  cleaning  up  the
  4018.       number, the callback procedure reads the CALLBACK.DAT file and  uses
  4019.       commands in the file to further clean up and validate the number.
  4020.  
  4021.       There  are  various  types  of  commands  in  the CALLBACK.DAT file.
  4022.       Comment lines begin with either "//" or "!".   Command  lines  begin
  4023.       with a keyword.  The following commands may occur in the file:
  4024.  
  4025.       6.2.2.1 STRIP command
  4026.  
  4027.       The  STRIP  command  specifies  phone number prefixes that are to be
  4028.       removed from the front of phone numbers.  The form  of  the  command
  4029.       is:
  4030.  
  4031.            STRIP prefix,prefix,...
  4032.  
  4033.       Where  "prefix"  is  a  digit string that is to be stripped from the
  4034.       front of the number.  This is intended to deal  with  long  distance
  4035.       numbers.   Since  the  callback  procedure  prepends the appropriate
  4036.       characters needed  to  dial  long  distance  numbers  when  that  is
  4037.       necessary,  it  is  desirable  to  strip digits such as '1' that the
  4038.       user may have specified at the front of a phone number.  You  should
  4039.       also strip off your own area code.
  4040.  
  4041.       If  you  specify multiple prefixes, separate them with commas.  When
  4042.       the stripping is performed, the first prefix is  compared  with  the
  4043.       start  of  the  phone  number.   If  a  match  occurs, the prefix is
  4044.       removed from  the  phone  number  and  then  the  second  prefix  is
  4045.       compared  with the remaining number.  This procedure is repeated for
  4046.       each prefix you specify.  You should specify "1" and "0"  first  and
  4047.  
  4048.       Chapter 6. Logon and Callback Procedures                          66
  4049.  
  4050.  
  4051.       then  your local area code.  For example, if your local area code is
  4052.       615, an appropriate STRIP command would be:
  4053.  
  4054.            STRIP 1,0,615
  4055.  
  4056.       Using this, the following phone numbers would all  be  converted  to
  4057.       555-1234: 615-555-1234, 1-615-555-1234, 1-555-1234.
  4058.  
  4059.       6.2.2.2 DIAL Command
  4060.  
  4061.       The  DIAL  command  specifies  the  modem  command  to  dial a local
  4062.       number.  The form of the DIAL command is:
  4063.  
  4064.            DIAL modem_command
  4065.  
  4066.       Where "modem_command" is the modem command string that is  prepended
  4067.       to  phone  numbers  when dialing local numbers.  For most modems the
  4068.       appropriate command is:
  4069.  
  4070.            DIAL ATDT
  4071.  
  4072.       This causes the modem to use touch tone dialing.
  4073.  
  4074.       6.2.2.3 LDDIAL Command
  4075.  
  4076.       The LDDIAL command specifies  the  modem  command  to  dial  a  long
  4077.       distance number.  The form of the LDDIAL command is:
  4078.  
  4079.            LDDIAL modem_command
  4080.  
  4081.       Where  "modem_command" is the modem command string that is prepended
  4082.       to phone numbers when dialing long numbers.   For  most  modems  the
  4083.       appropriate command is:
  4084.  
  4085.            LDDIAL ATDT1
  4086.  
  4087.       Note  the  "1"  after  "ATDT" that indicates the beginning of a long
  4088.       distance number.
  4089.  
  4090.       6.2.2.4 LOCAL Command
  4091.  
  4092.       The LOCAL command  specifies  a  pattern  to  identify  local  phone
  4093.       numbers.   It should occur after the STRIP command.  The form of the
  4094.       command is:
  4095.  
  4096.            LOCAL pattern
  4097.  
  4098.       Where "pattern" is a pattern string that is compared with the  phone
  4099.       number  after non-digits have been removed and the STRIP command has
  4100.       been performed.  If the number matches the pattern it is  considered
  4101.       to  be  a valid local number.  The following characters can occur in
  4102.       the pattern:
  4103.  
  4104.       % -- Matches a  single  character.   For  example,  "%%%%%%%"  would
  4105.           match 3273670.
  4106.  
  4107.       Chapter 6. Logon and Callback Procedures                          67
  4108.  
  4109.  
  4110.       ?   --  Matches  a  single  character  or  a missing character.  For
  4111.           example, "???????" would match 3273670  or  327  but  would  not
  4112.           match 6153273670.
  4113.  
  4114.       * -- Matches zero or more characters.
  4115.  
  4116.       (other  characters)  -- Other characters such as digits must exactly
  4117.           match characters in the  corresponding  character  positions  of
  4118.           the  number.   For  example, the pattern "%%%3670" would match a
  4119.           number with any three digit prefix  and  the  last  four  digits
  4120.           "3670".
  4121.  
  4122.       For  U.S.   local  numbers  the  following  LOCAL  command  would be
  4123.       appropriate:
  4124.  
  4125.            LOCAL %%%%%%%
  4126.  
  4127.       6.2.2.5 LD Command
  4128.  
  4129.       The LD command specifies a pattern to identify valid  long  distance
  4130.       phone  numbers.   It should occur after the STRIP command.  The form
  4131.       of the command is:
  4132.  
  4133.            LD pattern
  4134.  
  4135.       Where "pattern" is a pattern string that is compared with the  phone
  4136.       number  after non-digits have been removed and the STRIP command has
  4137.       been applied.  The pattern has the same syntax as described for  the
  4138.       LOCAL  command in Section 6.2.2.4.  For U.S.  long distance numbers,
  4139.       the following command would be appropriate:
  4140.  
  4141.            LD %%%%%%%%%%
  4142.  
  4143.       If you do not want to do callback  verification  for  long  distance
  4144.       numbers  you should omit the LD command from your CALLBACK.DAT file.
  4145.       In this case, the users will receive a message saying  that  TSX-BBS
  4146.       is  unable  to  do  callback verification and their usage class will
  4147.       remain as BASIC.
  4148.  
  4149.       6.2.2.6 EXCLUDE Command
  4150.  
  4151.       The EXCLUDE command specifies phone numbers that are not  valid  for
  4152.       callback verification.  The form of this command is:
  4153.  
  4154.            EXCLUDE number
  4155.  
  4156.       where  "number"  is  a  phone  number to exclude.  You may have more
  4157.       than one EXCLUDE command if you wish to  exclude  multiple  numbers.
  4158.       It  is  suggested  that  you  use  the  EXCLUDE  command to keep the
  4159.       callback verification procedure from calling  the  police  and  fire
  4160.       numbers  or  other critical numbers that malicious users might enter
  4161.       for verification.  The following is an example  of  a  command  that
  4162.       prevents callback verification from calling 555-1212:
  4163.  
  4164.       Chapter 6. Logon and Callback Procedures                          68
  4165.  
  4166.  
  4167.            EXCLUDE 555-1212
  4168.  
  4169.  
  4170.       6.3 Logon Using a Drop File
  4171.  
  4172.       In  some  configurations,  TSX-BBS  may  be  run  as a "server" on a
  4173.       satellite computer connected via serial lines with the  primary  BBS
  4174.       computer  system.   In this case, the primary BBS system may want to
  4175.       perform a logon on the TSX-BBS system for  a  user  running  on  the
  4176.       primary  BBS  system  to  allow  the  user  to  access some function
  4177.       provided by TSX-BBS.  Since the user has  already  logged  onto  the
  4178.       primary  system,  information  about the user such as name, address,
  4179.       available connect time, and ANSI and color capability is known.   It
  4180.       is  advantageous  for the primary system to be able to start TSX-BBS
  4181.       and automatically log on the user by passing the  information  about
  4182.       the  user  to  TSX-BBS in a "drop" file.  This operation can be done
  4183.       using the DROPIN.TPR procedure that is provided with TSX-BBS.
  4184.  
  4185.       The procedure is as follows:
  4186.  
  4187.       1.  The primary BBS  system  opens  a  communications  line  to  the
  4188.           TSX-BBS system.
  4189.  
  4190.       2.  The  primary  system  creates a drop file with information about
  4191.           the user.  The form of the drop file is  described  below.   The
  4192.           drop  file can be created by running the COPY command on the TSX
  4193.           system and feeding in the lines to go in the file.  A  control-Z
  4194.           character  can  be  sent to terminate the copy.  The form of the
  4195.           command to copy data from the serial line to a file is:
  4196.  
  4197.                COPY TT: filename
  4198.  
  4199.           If multiple lines connect  the  two  computers,  the  drop  file
  4200.           should   be  given  a  unique  name,  or  created  in  a  unique
  4201.           directory, so that it will not conflict with the drop files  for
  4202.           other users.
  4203.  
  4204.       3.  Once  the  drop file is created, the primary BBS should send TSX
  4205.           the command to start the BBS and run the  DROPIN.TPR  procedure.
  4206.           The  name of the drop file can be specified as an argument.  The
  4207.           following is an example TSX command to do this:
  4208.  
  4209.                RUN/LOCK BBSBIN:TPR BBSBIN:DROPIN BBS:TSXDROP.DAT
  4210.  
  4211.           where "TSXDROP.DAT" is the name  of  the  drop  file.   You  may
  4212.           specify  whatever  name  you  choose.  If you do not specify the
  4213.           name of the drop file, BBS:TSXDROP.DAT is used by default.
  4214.  
  4215.       6.3.1 Drop File Format
  4216.  
  4217.       The  drop  file  is  a  simple  ASCII  file  with   carriage-return,
  4218.       line-feed   delimited  records.   Each  record  passes  an  item  of
  4219.       information about the user to be logged  on.   Each  command  begins
  4220.       with   a  command  keyword  and  is  followed  by  a  space  and  an
  4221.       information  string.   The  NAME  command  is  required,  the  other
  4222.  
  4223.       Chapter 6. Logon and Callback Procedures                          69
  4224.  
  4225.  
  4226.       commands  are  optional.   The  following  is  a  list  of the valid
  4227.       commands:
  4228.  
  4229.       NAME first last -- Specifies the first and last name  of  the  user.
  4230.           This command is required.
  4231.  
  4232.       TEMPUSER  Y  or  N  -- If "TEMPUSER Y" is specified, TSX-BBS deletes
  4233.           the entry for this user from the user  authorization  file  when
  4234.           the  user logs off.  If TEMPUSER is not specified, TSX-BBS saves
  4235.           accounting information about the user.
  4236.  
  4237.       CLASS classname -- The TSX-BBS authorization class  that  is  to  be
  4238.           assigned  to  the  user.   The class names are defined using the
  4239.           SYSOP program.  If no class name is specified, "BASIC"  is  used
  4240.           by default.
  4241.  
  4242.       TIME  timeavail  --  Specifies the number of minutes of connect time
  4243.           that the user has available.  If this command  is  omitted,  the
  4244.           daily time limit appropriate to the user's class is used.
  4245.  
  4246.       BAUDRATE  value  --  Specifies  the  baud  rate at which the user is
  4247.           connected.  This command  does  not  cause  TSX  to  change  the
  4248.           actual  baud rate, it merely informs TSX of the user's baud rate
  4249.           so that it can pass the  value  on  to  other  programs  in  the
  4250.           DOOR.SYS  drop  file.   The  value is also used in download time
  4251.           estimations.
  4252.  
  4253.       ANSI Y or N -- Specify "ANSI Y" if  the  user's  terminal  has  ANSI
  4254.           capability  or  "ANSI  N"  if  it  does not.  If this command is
  4255.           omitted, TSX-BBS tests the user's terminal for ANSI capability.
  4256.  
  4257.       COLOR Y or N -- Specify "COLOR N" if the user cannot display color.
  4258.  
  4259.       IBMCHAR Y or N -- Specify "IBMCHAR N" if  the  user  cannot  display
  4260.           IBM graphic characters.
  4261.  
  4262.       LPP  number -- Number of lines that user can display on a page.  The
  4263.           default is 24.
  4264.  
  4265.       COMPANY company_name -- Name of company user is associated with.
  4266.  
  4267.       ADDR1 address -- First line of the user's street address.
  4268.  
  4269.       ADDR2 address -- Second line of the user's street address.
  4270.  
  4271.       CITY cityname -- City name for user's address.
  4272.  
  4273.       STATE statename -- State name for user's address.
  4274.  
  4275.       ZIP zipcode -- Zipcode for user's address.
  4276.  
  4277.       INETADDR address -- Internet address where user can be reached.
  4278.  
  4279.       VHPHONE phonenumber -- Voice home phone number.
  4280.  
  4281.       Chapter 6. Logon and Callback Procedures                          70
  4282.  
  4283.  
  4284.       DPHONE phonenumber -- Data (modem) phone number.
  4285.  
  4286.       WELCOME Y or N -- Specify  'Y'  or  'N'  depending  on  whether  the
  4287.           normal   welcome  message  should  be  displayed.   The  welcome
  4288.           message tells the user how much time  is  available  during  the
  4289.           current  session  and when they last logged on.  They must press
  4290.           a key to continue after the welcome message.  The default is  to
  4291.           display the welcome message.
  4292.  
  4293.       NEWS  Y  or  N  --  Specify 'Y' or 'N' depending on whether new news
  4294.           files should be displayed.  News files  are  only  displayed  if
  4295.           they  exist and are more recent than the last logon date for the
  4296.           user.  News files are named BBS:NEWSn.MSG.
  4297.  
  4298.       MAILCHECK Y or N -- Normally, TSX  checks  to  see  if  a  user  has
  4299.           pending  mail  each time the user logs on.  A message is printed
  4300.           if there is pending mail.  If you wish  to  suppress  this  mail
  4301.           check you may use the "MAILCHECK N" command.
  4302.  
  4303.       MENU  menuname  --  Specifies  the  name  of  the main BBS menu that
  4304.           should be invoked for the user.  The default menu is BBS:BBS.
  4305.  
  4306.       The following is an example drop file:
  4307.  
  4308.            NAME Phil Sherrod
  4309.            TIME 45
  4310.            CLASS BASIC
  4311.            WELCOME N
  4312.            NEWS N
  4313.            MENU BBS:GAMES
  4314.  
  4315.  
  4316.  
  4317.  
  4318.  
  4319.  
  4320.                                    Chapter 7
  4321.  
  4322.                                   File Library
  4323.  
  4324.  
  4325.  
  4326.  
  4327.       The file library is an important part of most  bulletin  boards  and
  4328.       for  some  systems  is  the  primary  reason  for  their  existence.
  4329.       TSX-BBS provides an outstanding file library as a  a  standard  part
  4330.       of  the  system.  Some of the features of this system are summarized
  4331.       below:
  4332.  
  4333.         . You can  group  your  files  in  hierarchical  categories.   For
  4334.           example,  you  could have a category called "CD ROMs" and within
  4335.           that category  have  subcategories  for  "Swimsuit  GIFs",  "IBM
  4336.           Utilities", etc.
  4337.  
  4338.         . File entries can have multi-line descriptions.
  4339.  
  4340.         . The  system  maintains  extended information about files such as
  4341.           the name of the person  who  uploaded  the  file,  the  download
  4342.           count, and the date of the last download.
  4343.  
  4344.         . A  very  powerful  search command is provided that allows search
  4345.           expressions such as "windows and (clock or alarm)".
  4346.  
  4347.         . Users can tag files and then download all of  the  tagged  files
  4348.           as a group.
  4349.  
  4350.         . You  can  use  complex  expressions to describe privileges users
  4351.           must have to download or upload files to each area.  If  a  user
  4352.           has  no  access to a file category the existence of the category
  4353.           is not revealed.  You can easily set  up  file  categories  that
  4354.           only  members of certain groups can access.  You can even set up
  4355.           privilege expressions that restrict access to file  areas  based
  4356.           on the day of the week or the hour of the day.
  4357.  
  4358.         . You  can  force  all file uploads to go into a private area that
  4359.           the sysop can review before posting for public access.
  4360.  
  4361.         . You can write TPL programs to  add  files  to  file  categories,
  4362.           list  files in a category, modify file entries, and select files
  4363.           based on criterion such as date,  size,  download  counts,  etc.
  4364.           You  can  even  write TPL programs that unzip files and then add
  4365.           them to the file library with the FILE_ID.DIZ file used for  the
  4366.           description.
  4367.  
  4368.  
  4369.  
  4370.  
  4371.  
  4372.                                        71
  4373.  
  4374.       Chapter 7. File Library                                           72
  4375.  
  4376.  
  4377.       7.1 File Categories and File Sets
  4378.  
  4379.       TSX-BBS  allows  you  to  group  your  files  into  three  types  of
  4380.       collections: file categories, file sets, and DOS directory lists.
  4381.  
  4382.       7.1.1 File Sets
  4383.  
  4384.       A "file set" is a list of file descriptions.  Typically, files  with
  4385.       some  common characteristic are grouped together in a file set.  For
  4386.       example, you may  want  to  create  file  sets  for  DOS  utilities,
  4387.       Windows utilities, GIF files, etc.
  4388.  
  4389.       For  each file in the file set TSX-BBS stores the following items of
  4390.       information:
  4391.  
  4392.       Description -- The description can be up to 18 lines long  and  each
  4393.           line can be up to 45 characters wide.
  4394.  
  4395.       DOS  filename -- This is the actual name of the file as it is stored
  4396.           on disk.
  4397.  
  4398.       Display filename -- This is the name that is presented to  the  user
  4399.           when  doing  file browses.  Usually this name is the same as the
  4400.           DOS file name but you have the option of specifying a  different
  4401.           name.
  4402.  
  4403.       Date of file -- The creation date of the file.
  4404.  
  4405.       Date  uploaded  --  The  date  when  the  file was added to the file
  4406.           library.
  4407.  
  4408.       Size of file -- The size of the file.
  4409.  
  4410.       Uploaded by -- The name of the person who uploaded the file.
  4411.  
  4412.       Download count -- The number of times the file has been downloaded.
  4413.  
  4414.       Date last downloaded -- The date when the file was last downloaded.
  4415.  
  4416.       Free download -- Determines  whether  or  not  the  download  counts
  4417.           against the user's daily byte and time limits.
  4418.  
  4419.       Download  cost  --  Not  presently used.  Eventually this will allow
  4420.           the sysop to charge users for file downloads.
  4421.  
  4422.       The file entries for each file set are stored in a file  whose  name
  4423.       is  designated  by  the  sysop  when  the  file set is created.  The
  4424.       extensions for these files is  normally  ".FDL",  which  stands  for
  4425.       File  Description  List.   The  FDL  files  should  be stored in the
  4426.       directory to which the "BBS:" logical device name is assigned.   For
  4427.       example, a file set for swimsuit GIFs might be named BBS:SWIM.FDL.
  4428.  
  4429.       Entries  in  FDL  files  are  stored  as  binary "TIO" records.  You
  4430.       cannot use an ASCII editor to modify FDL  files.   However,  you  do
  4431.       not  need  to  directly edit the FDL files because the TSX-BBS SYSOP
  4432.  
  4433.       Chapter 7. File Library                                           73
  4434.  
  4435.  
  4436.       program provides all of the tools you need to  maintain  file  sets.
  4437.       You  can  write  TPL  programs to read, add, modify, and delete file
  4438.       entries.
  4439.  
  4440.       7.1.2 File Categories
  4441.  
  4442.       A "file category" is a collection of one or more file sets.  A  file
  4443.       category  may  also  include  other  file  categories  to  produce a
  4444.       hierarchical structure.   For  example,  you  might  create  a  file
  4445.       category  called  "CD ROMs" and within that category have categories
  4446.       for "Night Owl" and "Pier One".  Within  the  "Night  Owl"  category
  4447.       you can have a file set for each group of files on the disk.
  4448.  
  4449.       When  you  create  a  category using the SYSOP program you are asked
  4450.       for the following items of information:
  4451.  
  4452.       Title -- The name of the category that is presented to your users.
  4453.  
  4454.       Filename -- The name of the file in which the list of file sets  and
  4455.           subcategories  is stored.  The extension ".FAL" is added and the
  4456.           file is stored in the "BBS:" directory.
  4457.  
  4458.       Access priv -- This is a privilege expression of the form  described
  4459.           in  Chapter  4  that controls whether users can access file sets
  4460.           or subcategories of the  category.   If  you  leave  this  field
  4461.           blank,  any  user  can  access  the  category.  If you specify a
  4462.           privilege expression and the value of the expression  is  false,
  4463.           then  the  user may not access any files within the category and
  4464.           the category does not appear in the file area display  list  for
  4465.           the  user.   Note that even if a user has the required privilege
  4466.           to access a category (or the category does not have a  privilege
  4467.           expression),  the  user  may be blocked by privilege expressions
  4468.           in lower level subcategories or at the file set level.
  4469.  
  4470.       The list of items within a file category is stored in a  file  whose
  4471.       name  is  designated by the sysop when the category is created.  The
  4472.       file extension should be ".FAL" which stands  for  File  Area  List.
  4473.       The  FAL  files  are  stored  in  the  directory to which the "BBS:"
  4474.       logical device name is assigned.  The FAL files contain  ASCII  data
  4475.       and  may  be  edited  with  an  ASCII editor.  However, it is rarely
  4476.       necessary to directly edit  FAL  files  because  the  SYSOP  program
  4477.       includes  facilities  for  creating,  modifying,  and  deleting file
  4478.       categories.
  4479.  
  4480.       There is a master  FAL  file  named  "BBS:MASTER.FAL"  that  is  the
  4481.       "root"  of  the  file  library.  You may not change the name of this
  4482.       file.  All other categories are subcategories (or sub-sub...,  etc.)
  4483.       of this master category.
  4484.  
  4485.       7.1.3 Simple DOS Directories
  4486.  
  4487.       In  addition  to file sets and file categories, you may also include
  4488.       simple DOS directories as file areas.  When a user  selects  a  file
  4489.       area  consisting  of a simple DOS directory, he is presented with an
  4490.       alphabetical list of the files, their  creation  dates,  and  sizes,
  4491.  
  4492.       Chapter 7. File Library                                           74
  4493.  
  4494.  
  4495.       much  the  same  as  doing  a "DIR" system command.  There is no FDL
  4496.       file to describe a DOS directory, so files do not have  descriptions
  4497.       and  information  is  not  available  regarding download counts, the
  4498.       person who uploaded the file, etc.
  4499.  
  4500.       The only advantage to using a simple  DOS  type  directory  is  that
  4501.       there   is   no   effort   involved  in  maintaining  the  BBS  file
  4502.       information.  If a file is copied into the DOS directory  it  become
  4503.       available  immediately  to  BBS users without any effort required to
  4504.       update FDL files.  Similarly, all you have to do to  remove  a  file
  4505.       is delete it from the directory.
  4506.  
  4507.  
  4508.       7.2 Creating File Categories and File Sets
  4509.  
  4510.       The  SYSOP  program is used to create file categories and file sets.
  4511.       It is best to run the SYSOP  program  while  you  are  reading  this
  4512.       section so you can follow along with the instructions.
  4513.  
  4514.       When  you  start the SYSOP program you will be presented with a menu
  4515.       of management functions.  Type 'F' to select  "File  library".   You
  4516.       will  then  be  presented  with  a  list of all of the file sets and
  4517.       categories that are at the top level of the  master  category.   You
  4518.       can  use  the  up  and  down arrow keys and page-up and page-down to
  4519.       move through the list and highlight entries.
  4520.  
  4521.       If you highlight a file category  entry,  you  can  press  Enter  or
  4522.       right-arrow  do  move  into  the  category and display a list of the
  4523.       file sets  and  sub-categories  of  the  category.   You  can  press
  4524.       left-arrow  to  move from within a category to the next higher level
  4525.       (i.e., closer to the root).
  4526.  
  4527.       7.2.1 File category creation
  4528.  
  4529.       To create a new category, start the SYSOP  program  and  select  the
  4530.       file  library  option.   If the new category is to be created at the
  4531.       top (root) level of the directory  structure,  type  'C'  to  select
  4532.       "Category  create".  If the category is a sub-category of some other
  4533.       category, highlight the category under which the new category is  to
  4534.       be  created  and  press Enter or right-arrow to enter that category.
  4535.       Continue this process if the new  category  is  a  sub-sub-category,
  4536.       etc.   Once  you  reach the category where the new category is to be
  4537.       created, type 'C' to select "Category create".
  4538.  
  4539.       You will be presented with a menu prompting you to enter the  title,
  4540.       the  filename,  and  the  access  privileges  for the category.  The
  4541.       title is the name of the category that is presented to users in  the
  4542.       file  area  list.   The file name is the name of the file that holds
  4543.       information about  items  in  the  category.   Enter  from  1  to  8
  4544.       characters  for  the name.  "BBS:" will be prepended and ".FAL" will
  4545.       be appended.
  4546.  
  4547.       The  "Access  priv"  field  allows  you  to  specify  a  conditional
  4548.       expression  that  controls which users can access this category.  If
  4549.       you leave this field blank then there are no restrictions placed  on
  4550.  
  4551.       Chapter 7. File Library                                           75
  4552.  
  4553.  
  4554.       the  category  and  any  user  can  access it.  If you wish to limit
  4555.       access, specify a conditional expression in the  form  described  in
  4556.       Chapter  4.   For example, if you wish to limit access to users with
  4557.       S5 privilege, specify "S5" as the access privilege expression.
  4558.  
  4559.       Once you have filled in the fields of the "New File Category"  menu,
  4560.       press ESC to create the category or F4 to abort the creation.
  4561.  
  4562.       7.2.2 File set creation
  4563.  
  4564.       To  create  a  file  set, return to the file library management menu
  4565.       and press 'F' to select "File set create".  If the file set is  part
  4566.       of  some  category  other than the top level category, highlight the
  4567.       category that the file set goes in and press  Enter  or  right-arrow
  4568.       to enter it.
  4569.  
  4570.       You  will  then  be  presented  with  a  menu  prompting you for the
  4571.       following items of information:
  4572.  
  4573.       Title -- Specify the name of the file set  that  you  want  to  have
  4574.           displayed to your users.
  4575.  
  4576.       Filename  --  Specify  the name of the FAL file in which information
  4577.           about the file set is to be stored.  You should specify a  1  to
  4578.           8  character  name,  "BBS:"  will  be  prepended to the name and
  4579.           ".FDL" will be appended.  If you are setting  up  a  simple  DOS
  4580.           directory  type  area,  do  not  specify a file name; just leave
  4581.           this field blank.
  4582.  
  4583.       Path -- Specify the device and directory where the files  associated
  4584.           with  this file set are stored.  Note that since you may specify
  4585.           a device name, you may place different file  sets  on  different
  4586.           devices.   You are welcome to specify the name of a CD ROM drive
  4587.           if the files are located there.  All of the  files  for  a  file
  4588.           set  must  be  stored  in a single directory on a single device.
  4589.           If you are setting  up  a  simple  DOS  directory,  specify  the
  4590.           device and directory where the files are located.
  4591.  
  4592.       Access  --  If used, this is a conditional expression that specifies
  4593.           what privilege is required to access  files  in  the  file  set.
  4594.           See  Chapter  4  for  information  regarding  the  form  of this
  4595.           expression.  If a user does not have access to a file  set,  the
  4596.           file  set does not appear in the file area list displayed to the
  4597.           user.  If you leave this field blank, any user  can  access  any
  4598.           file in the file set.
  4599.  
  4600.       Download  --  You may specify a conditional expression that controls
  4601.           who can download files from the file set.   If  you  leave  this
  4602.           field  blank,  any  user  can  download  any file from the area.
  4603.           Note: since the access privilege  expression  is  separate  from
  4604.           the  download  expression, you can allow users to browse through
  4605.           the file set but block them from downloading files.  This  could
  4606.           be  useful  for  unregistered BBS users who you wish to allow to
  4607.           browse the board but not perform downloads.
  4608.  
  4609.       Chapter 7. File Library                                           76
  4610.  
  4611.  
  4612.       Upload -- You may specify a  conditional  expression  that  controls
  4613.           who  can  upload  files to the file set.  If you leave the field
  4614.           blank, then any user can upload files to the file set.   If  you
  4615.           wish  to  disallow  direct uploads to the file set, specify "NO"
  4616.           for the upload privilege expression.   When  a  user  uploads  a
  4617.           file,  the  file  immediately  becomes accessible to other users
  4618.           (provided they have access privilege).
  4619.  
  4620.           Caution: it is usually not a good idea to allow  ordinary  users
  4621.           to  upload  files  directly  to  public  file  sets.  It is much
  4622.           better to create a special upload file set  to  which  only  the
  4623.           sysop  has  access.   The  sysop  can then review files and move
  4624.           them to the appropriate file sets before  other  users  can  see
  4625.           them.   To  block all uploads to a file set you may specify "NO"
  4626.           as the conditional expression.
  4627.  
  4628.       Area # ---
  4629.  
  4630.       Free Download -- If this field is  set  to  'Y'  then  when  a  user
  4631.           downloads  a  file from the file set the download does not count
  4632.           against the daily time and byte limits for the user.
  4633.  
  4634.       Copy on download -- If this field is set to 'Y' then  files  in  the
  4635.           file  set  are  copied  to a temporary directory before they are
  4636.           downloaded.  This is essential for CD ROM  changers  because  it
  4637.           will  block other users if you hold a file open for long periods
  4638.           of time while a download  is  being  done.   When  the  download
  4639.           completes, the file is deleted from the temporary directory.
  4640.  
  4641.       CD  ROM media -- Specify 'Y' if this file set is located on a CD ROM
  4642.           drive.
  4643.  
  4644.       Once you have finished filling in the menu, press ESC to create  the
  4645.       file  set  or press F4 to abort the creation.  If you wish to modify
  4646.       the attributes for a file set, use the arrow keys to  highlight  the
  4647.       line for the file set and press 'M' to select "Modify".
  4648.  
  4649.       When  you  create  a new file set it will be initially empty.  There
  4650.       are several ways that files can be added to a file set: they can  be
  4651.       uploaded  directly  into the file set (if a user has the appropriate
  4652.       privilege), files can be moved from one file  set  to  another,  and
  4653.       you can add an entry to a file set using the SYSOP program.
  4654.  
  4655.       To  "enter"  a file set and list the files that are part of the file
  4656.       set, select the line for the file set and press Enter.  When you  do
  4657.       this  you  will see a two column list showing the names of the files
  4658.       and the first lines of the descriptions.  To add a file  to  a  file
  4659.       set  type  'A'  to  select "Add".  You will then be presented with a
  4660.       menu prompting you for the following items of information about  the
  4661.       file:
  4662.  
  4663.       DOS  filename -- Specify the actual name of the file as it is stored
  4664.           on disk.  You may specify a device and  directory  name  if  the
  4665.           file  is not in your current working directory; the file will be
  4666.           moved to the directory where files for the file set are stored.
  4667.  
  4668.       Chapter 7. File Library                                           77
  4669.  
  4670.  
  4671.       Display filename -- This is the name of the file to be displayed  to
  4672.           your  users.   If  you leave this field blank, the DOS file name
  4673.           will be used.
  4674.  
  4675.       Download cost -- This value is not currently used.
  4676.  
  4677.       Uploaded by -- If you wish, you may enter the  name  of  the  person
  4678.           who uploaded the file.
  4679.  
  4680.       Free  download  --  Specify  'Y' for this field if downloads of this
  4681.           file are not to be counted against a user's daily time and  byte
  4682.           limits.   Note, you can also denote free downloads by specifying
  4683.           it as part of the file set attributes that apply  to  all  files
  4684.           in the file set.
  4685.  
  4686.       Retain  original copy -- As part of adding a file to a file set, the
  4687.           file will be copied into the  directory  where  files  that  are
  4688.           part  of  this file set are stored.  This directory is specified
  4689.           as one of  the  attributes  of  the  file  set.   Normally,  the
  4690.           original  copy  of the file is deleted after being copied to the
  4691.           file set directory.  However, if you specify 'Y' for this  field
  4692.           then  the  original  copy of the file is not deleted after it is
  4693.           copied into the file set directory.
  4694.  
  4695.       Once you fill in the file entry menu,  press  ESC  to  complete  the
  4696.       entry or press F4 to abort the entry.
  4697.  
  4698.  
  4699.       7.3 Modifying File Descriptions and Attributes
  4700.  
  4701.       You  can  examine  and modify file attributes and file descriptions.
  4702.       To do this, highlight the line for the file and type 'M'  to  select
  4703.       "Modify"  if  you  wish  to modify file attributes.  Type 'E' if you
  4704.       wish to edit the file description.
  4705.  
  4706.  
  4707.       7.4 Deleting Files, File Sets, and File Categories
  4708.  
  4709.       To delete a file from a file set, enter the SYSOP file  library,  go
  4710.       into  the category and file set that has the file, and highlight the
  4711.       line for the file.  Then type 'D' to  select  "Delete".   A  warning
  4712.       message  will be presented, type 'Y' if you wish to proceed with the
  4713.       deletion.  Note: this not only deletes the file entry from the  file
  4714.       set  FDL  file, it also deletes the file from the disk.  If you wish
  4715.       to save a copy of the file you must copy the  file  to  a  different
  4716.       name  or  directory before performing the delete operation in SYSOP.
  4717.       If you delete a file from the disk but do not use  SYSOP  to  remove
  4718.       the  entry from the file set, then the file will appear in file list
  4719.       displays but errors will occur if a user attempts  to  download  the
  4720.       file.
  4721.  
  4722.       You  can  also  use  the SYSOP program to delete entire file sets or
  4723.       file categories.  To do this, highlight the line for  the  file  set
  4724.       or  category  and  type 'D' for "Delete".  A warning message will be
  4725.  
  4726.       Chapter 7. File Library                                           78
  4727.  
  4728.  
  4729.       displayed telling you how many files will be deleted.  Type  'Y'  if
  4730.       you wish to proceed with the deletion.
  4731.  
  4732.  
  4733.       7.5 Moving Files Between File Sets
  4734.  
  4735.       A  common  file  maintenance operation is moving files from one file
  4736.       set to another.  This will be especially  useful  if  you  configure
  4737.       the  system  so  that  all uploads go to a private file set that the
  4738.       sysop can review before moving them to the public file sets.
  4739.  
  4740.       The SYSOP program uses a "clipboard" concept  to  make  it  easy  to
  4741.       move  files.   To  move  files from one file set to another, go into
  4742.       the SYSOP program and display the list of files in the  source  file
  4743.       set.   Use  the  arrow  keys  or  page-up/page-down  to  locate  and
  4744.       highlight the line for a file to be moved.  You can  also  type  'F'
  4745.       to  select  "Find"  and type the first few characters of the name of
  4746.       the file you wish to located.  Once you have  highlighted  the  line
  4747.       for  the  file,  type  'C'  to select "Clipboard".  Then type 'C' to
  4748.       select the "Cut into clipboard" action from the  clipboard  pulldown
  4749.       menu.   The file entry will disappear from the primary file list and
  4750.       the name will be shown in a smaller "Clipboard" list  in  the  lower
  4751.       right  corner  of  the screen.  You can then select additional files
  4752.       and cut them into the clipboard.
  4753.  
  4754.       Once you have collected a set of files in  the  clipboard,  you  are
  4755.       ready  to  move them to the destination file set.  To do this, press
  4756.       ESC to exit from the file  list  for  the  source  file  set.   Then
  4757.       highlight  the  line  for  the  destination file set and type 'P' to
  4758.       select "Paste clipboard".  The files will be added to  the  selected
  4759.       file  set  and  their  names will disappear from the Clipboard list.
  4760.       Not only are the file description entries  moved  to  the  new  file
  4761.       set,  the  files  themselves  are  moved  from the directory for the
  4762.       source file set to the directory for the destination file  set.   If
  4763.       you  move  some  files  into  the clipboard and then decide that you
  4764.       want to cancel the move and leave the files in the  original  source
  4765.       file   set,  reenter  the  source  file  set,  type  'C'  to  select
  4766.       "Clipboard", and then type 'R' to select "Restore clipboard files".
  4767.  
  4768.  
  4769.       7.6 Setting up Restricted File Areas
  4770.  
  4771.       Many bulletin boards have restricted file areas  that  can  only  be
  4772.       accessed  by  adults  or other restricted classes of users.  TSX-BBS
  4773.       has a very powerful facility for  limiting  file  access.   You  can
  4774.       define  privilege  flags  that  mean "Adult", "Extended access", and
  4775.       other types of privileges.  There are 80  privilege  flags  reserved
  4776.       for  your  use.   You can also assign a "group" number to a user and
  4777.       use this group number  to  control  which  file  areas  a  user  can
  4778.       access.   In  addition,  you  can use privilege expressions to limit
  4779.       access to file areas based on the time of day  or  the  day  of  the
  4780.       week.   By  combining  these  privilege  tests  you  can create very
  4781.       complex access control expressions.
  4782.  
  4783.       Chapter 7. File Library                                           79
  4784.  
  4785.  
  4786.       The  key  to  devising  and   understanding   access   controls   is
  4787.       "conditional  expressions" which are described in Chapter 4 starting
  4788.       on page 31.  If you have not yet read that chapter,  you  should  do
  4789.       so now.
  4790.  
  4791.       We  will  explain  how  to  set up restricted file sets by way of an
  4792.       example.  Let's define an "Adult" privilege and  create  an  "Adult"
  4793.       file set whose access is restricted to users with that privilege.
  4794.  
  4795.       The  first  step  in  defining  a  privilege  is  to start the SYSOP
  4796.       program and type 'U' to select "User authorization".  Next type  'P'
  4797.       to  select  "Privileges" from the user authorization menu.  You will
  4798.       be presented with the first of two pages showing the  sysop  defined
  4799.       privilege  names.  You can use page-up and page-down to move between
  4800.       the two pages.  You will see that there are  entries  available  for
  4801.       80  privileges.   Each privilege has a label of the form "Snn" where
  4802.       "nn" is a number in the range 00 to 79.  Associated with  the  label
  4803.       is  a  field  where  you  can  type  in  a textual name.  Let's make
  4804.       privilege S01 be the Adult privilege.  Use the  down  arrow  key  to
  4805.       move  the cursor to the field next to the S01 label and type "Adult"
  4806.       as the privilege name.  Then type ESC to  exit  from  the  privilege
  4807.       name menu.
  4808.  
  4809.       You  should now be positioned back at the primary user authorization
  4810.       menu with the list of  currently  authorized  users  displayed.   If
  4811.       there  are no authorized users type 'A' to add a user.  If there are
  4812.       some authorized users, use the arrow keys to select  one  and  press
  4813.       Enter  to display information about the user.  Next, press page-down
  4814.       twice and you should see a screen listing  the  privileges  for  the
  4815.       user.   There  are two columns of privileges.  The left column shows
  4816.       the "Build-in Privileges" that  are  inherently  known  by  TSX-BBS.
  4817.       The  right  column lists any "Sysop Defined Privileges".  You should
  4818.       see "S1 Adult" as one of the entries.  You can use  the  arrow  keys
  4819.       to  position the cursor to the Y/N field next to the privilege entry
  4820.       and type 'Y' or 'N' to enable or disable the privilege.   After  you
  4821.       have  set  the privilege appropriately, press ESC twice to return to
  4822.       the main SYSOP menu.
  4823.  
  4824.       The next thing to do is to define the  Adult  file  set.   From  the
  4825.       main  SYSOP  menu  type 'F' to select "File library".  Next type 'F'
  4826.       to select "File set create".  Enter "Adult" (or some  other  string)
  4827.       as  the  title  for  the forum, then enter "ADULT" as the file name.
  4828.       Also enter the path name where the files will be stored.
  4829.  
  4830.       The next step is to define  the  privileges  required  by  users  to
  4831.       access  the  file set.  On the "Access" line enter "S1".  This tells
  4832.       TSX-BBS to only allow users with S1 privilege to  access  this  file
  4833.       set.   Remember,  we defined S1 to be the Adult privilege.  Assuming
  4834.       you wish to allow any user who has access to  the  file  set  to  be
  4835.       able  to  download from it, you can leave the "Download" line blank.
  4836.       You could specify a privilege expression if  you  wish  to  restrict
  4837.       downloads.   Specify in the "Upload" line the privileges required to
  4838.       directly upload files to the file set.  If you  wish  to  allow  any
  4839.       user  with  access  to  the file set to do direct uploads, leave the
  4840.       field blank.  If you wish to disallow direct uploads,  specify  "NO"
  4841.  
  4842.       Chapter 7. File Library                                           80
  4843.  
  4844.  
  4845.       in  the  field.  Press ESC to exit from the "New File Set" menu once
  4846.       you have filled in the fields.
  4847.  
  4848.       That completes the creation of the restricted file set.   Note  that
  4849.       the  conditional expression that you typed in the "Access" field was
  4850.       simply  "S1".   If  you  have  need,  you  can  use   more   complex
  4851.       expressions.   For  example,  suppose  you  had  two privileges with
  4852.       labels S1 and S2 and wished to allow users with either privilege  to
  4853.       access  the  file  set.   In  that case, the appropriate conditional
  4854.       expression would be "S1||S2".  See Chapter 4 for a full  explanation
  4855.       of conditional expressions.
  4856.  
  4857.  
  4858.       7.7 Setting Up File Library Menus
  4859.  
  4860.       TSX-BBS  comes  with  a  FILE.MNU menu file that implements the file
  4861.       library functions.  This menu file is stored  in  the  directory  to
  4862.       which  the  "BBSBIN:"  logical  device  name  is  assigned.  You are
  4863.       welcome to modify and customize this menu.  You can  also  rearrange
  4864.       the  functions  so  that  they  are  accessed from other menus.  See
  4865.       Chapter 5 for a full discussion of menu  design.   As  described  in
  4866.       Section  5.7.3,  the "ACTION" phrases determine what actions will be
  4867.       taken when a menu key is pressed.  The following is a  list  of  the
  4868.       menu actions that relate to the file library.
  4869.  
  4870.       datesearch -- Search for files by date
  4871.  
  4872.           The  datesearch  action begins the BBS operation that searches a
  4873.           file area for all files created since  a  specified  date.   The
  4874.           user is prompted to enter the date.  The form of the action is
  4875.  
  4876.                action=datesearch(falname[,fdlname])
  4877.  
  4878.           where  'falname' is the name of the FAL file containing the area
  4879.           descriptions and 'fdlname' is the name  of  the  FDL  file  that
  4880.           contains  the file descriptions to be searched.  If you omit the
  4881.           'fdlname' argument then all FDL files listed  in  the  FAL  file
  4882.           are  searched.  For example, the following action searches files
  4883.           in a FDL list called "bbs:swim" that  is  part  of  a  FAL  area
  4884.           called "bbs:master":
  4885.  
  4886.                action=datesearch(bbs:master,bbs:swim)
  4887.  
  4888.           whereas  the  following  action searches all FDL files contained
  4889.           in the bbs:master FAL:
  4890.  
  4891.                action=datesearch(bbs:master)
  4892.  
  4893.       fallist -- Display file area list
  4894.  
  4895.           The fallist action displays a list of file areas.  The  form  of
  4896.           the action is
  4897.  
  4898.                action=fallist(falname,heading)
  4899.  
  4900.       Chapter 7. File Library                                           81
  4901.  
  4902.  
  4903.           where  'falname' is the name of the FAL file containing the area
  4904.           descriptions and 'heading' is a string to be  displayed  at  the
  4905.           top  of  the  selection list.  For example, the following action
  4906.           displays a list of files described by the "bbs:master.fal"  file
  4907.           and prints "All file areas" as the title:
  4908.  
  4909.                action=fallist(bbs:master,"All file areas")
  4910.  
  4911.       falsearch -- Search file descriptions
  4912.  
  4913.           The  falsearch  action  invokes  the BBS subsystem that searches
  4914.           file descriptions for a text string that the user enters.   This
  4915.           action  performs "global" searches that span multiple file sets.
  4916.           The form of this action is
  4917.  
  4918.                action=falsearch(falname,heading)
  4919.  
  4920.           where 'falname' is the name of the FAL file containing the  list
  4921.           of  files  (and/or  subareas)  that  are  to  be  searched,  and
  4922.           'heading' is a string to be displayed during  the  search.   For
  4923.           example,  the following action searches all files defined by the
  4924.           bbs:master.fal fal file and displays "All  file  areas"  as  the
  4925.           search heading:
  4926.  
  4927.                action=falsearch(bbs:master,"All file areas")
  4928.  
  4929.           See  Section  7.8 for information about the types of expressions
  4930.           that users can specify for searching.
  4931.  
  4932.       fdllist -- List files in an FDL
  4933.  
  4934.           The fdllist action causes the BBS to list  the  descriptions  of
  4935.           the  files  in  a  specified  file  set  (FDL) that is part of a
  4936.           specified file category (FAL).   The  specified  FAL  file  must
  4937.           have  an  entry  for  the  specified FDL file.  As the names are
  4938.           listed  the  user  is  provided   options   such   as   tagging,
  4939.           downloading, searching, etc.  The form of the action is
  4940.  
  4941.                action=fdllist(falname,fdlname)
  4942.  
  4943.           where  'falname'  is  the  name of the FAL file and 'fdlname' is
  4944.           the name of the FDL file.  For  example,  the  following  action
  4945.           lists  all  files  in  the bbs:swim.fdl file that is part of the
  4946.           bbs:master.fal area:
  4947.  
  4948.                action=fdllist(bbs:master,bbs:swim)
  4949.  
  4950.       fdlsearch -- Search through file list
  4951.  
  4952.           The fdlsearch action prompts the user to enter a word or  phrase
  4953.           to  search  for  and then searches through the file descriptions
  4954.           in a specified FDL file that is part of a  specified  FAL  area.
  4955.           Files  that  have  the matching word or phrase in their names or
  4956.           descriptions are listed and the user  may  tag  and/or  download
  4957.           them.  The form of the action is
  4958.  
  4959.       Chapter 7. File Library                                           82
  4960.  
  4961.  
  4962.                action=fdlsearch(falname,fdlname)
  4963.  
  4964.           where  'falname'  is  the  name  of  the  FAL file area file and
  4965.           'fdlname' is the  name  of  the  file  description  file.   This
  4966.           action  differs  from  the  falsearch  action  in that falsearch
  4967.           searches all file descriptions that are in  all  file  sets  and
  4968.           subcategories   of   a  specified  category,  whereas  fdlsearch
  4969.           searches only a specified file set.
  4970.  
  4971.       fdlupload -- Upload a file
  4972.  
  4973.           The fdlupload action begins a sequence  that  prompts  the  user
  4974.           for  a  file  name  and description and then uploads the file to
  4975.           the bulletin board and enters the description into  a  specified
  4976.           FDL file.  The form of the action is
  4977.  
  4978.                action=fdlupload(falname,fdlname)
  4979.  
  4980.           where  'falname' is the name of a File Area List (FAL) file that
  4981.           includes the FDL file, and 'fdlname'  is  the  name  of  a  File
  4982.           Description  List  (FDL) file into which the description for the
  4983.           file being uploaded  is  stored.   For  example,  the  following
  4984.           action  begins  an  upload.  The file description is placed in a
  4985.           file named "bbs:newfiles.fdl".  The  File  Area  List  (FAL)  is
  4986.           "bbs:master.fal".
  4987.  
  4988.                action=fdlupload(bbs:master,bbs:newfiles)
  4989.  
  4990.       tagdl  --  Download  currently tagged files.  The form of the action
  4991.           is:
  4992.  
  4993.                action=tagdl
  4994.  
  4995.       tagedit -- Edit the list of tagged files.  The form  of  the  action
  4996.           is:
  4997.  
  4998.                action=tagedit
  4999.  
  5000.  
  5001.       7.8 Search expressions
  5002.  
  5003.       TSX-BBS  offers  a  very  powerful  file  search  facility  --  more
  5004.       powerful than you probably have encountered in  other  BBS  systems.
  5005.       In  addition  to  searching  for  an  individual  word, you can also
  5006.       search for logical expressions involving words  combined  with  AND,
  5007.       OR,  and  NOT operations.  You can use parentheses to group terms in
  5008.       the expression.
  5009.  
  5010.       The AND operator selects only those files  whose  descriptions  have
  5011.       the  words  (or  subexpressions) joined by AND.  For example, if you
  5012.       want to find a clock program for Windows, try the  following  search
  5013.       string:
  5014.  
  5015.            clock and windows
  5016.  
  5017.       Chapter 7. File Library                                           83
  5018.  
  5019.  
  5020.       The  OR  operator selects files whose descriptions contain either of
  5021.       the specified words (or subexpressions).  Perhaps you would like  to
  5022.       find  files  related  to  amateur  radio;  try  the following search
  5023.       expression:
  5024.  
  5025.            amateur or radio or ham
  5026.  
  5027.       The NOT operation excludes any file containing the  specified  word.
  5028.       For  example,  suppose  you want to find amateur radio files but are
  5029.       not interested in Windows related files; you might try  this  search
  5030.       string:
  5031.  
  5032.            (amateur or radio or ham) and not windows
  5033.  
  5034.       How  about  GIF  files  related to Sharon Stone who starred in Basic
  5035.       Instinct:
  5036.  
  5037.            gif and ((sharon and stone) or (basic and instinct))
  5038.  
  5039.       When performing the comparison, the search  matches  each  word  you
  5040.       specify  with  words in the file name and description.  A match will
  5041.       occur if one of your words matches the front part of  a  word  in  a
  5042.       file  description  but  a match will not occur if one of your target
  5043.       words is embedded in another word.  For example, a search for  "sin"
  5044.       would  match  with  "sin",  and  "single"  but  would not match with
  5045.       "insincere".  Similarly,  a  search  for  "book"  would  match  with
  5046.       "book", "books", and "booking" but not "handbook".
  5047.  
  5048.  
  5049.       7.9 PCBoard DIR File to FDL File Converter
  5050.  
  5051.       TSX-BBS  comes  with  a  program  for  converting PCBoard style file
  5052.       description files to TSX-BBS FDL files.  The name  of  this  program
  5053.       is  PCBTOFDL.   This  program  is useful not only for sites that are
  5054.       converting to TSX-BBS from PCBoard, but also for use  in  converting
  5055.       file  descriptions  that  are  distributed  on  CD  ROMs  in PCBoard
  5056.       format.
  5057.  
  5058.       The command to perform a conversion is:
  5059.  
  5060.            PCBTOFDL pcb_file fdl_file
  5061.  
  5062.       where "pcb_file" is the name of the PCBoard style  description  file
  5063.       and  "fdl_file"  is  the name of the TSX-BBS FDL file to be created.
  5064.       The default extension for the  "pcb_file"  is  ".DIR";  the  default
  5065.       extension for the "fdl_file" is ".FDL".
  5066.  
  5067.       This  program  creates a FDL file with the specified name.  You must
  5068.       edit the MASTER.FAL file and make an entry for the FDL file.
  5069.  
  5070.       Chapter 7. File Library                                           84
  5071.  
  5072.  
  5073.       7.10 TBBS DIR File to FDL File Converter
  5074.  
  5075.       A program named DIRTOFDL is provided with TSX-BBS  to  convert  TBBS
  5076.       description  files  to  TSX-BBS FDL files.  The command to perform a
  5077.       conversion is:
  5078.  
  5079.            DIRTOFDL dir_file fdl_file file_directory
  5080.  
  5081.       where "dir_file" is the name of the TBBS DIR file to  be  converted,
  5082.       "fdl_file"  is  the  name of the TSX-BBS FDL file to be created, and
  5083.       "file_directory"  is  the  device  and  directory  where  the  files
  5084.       described by the DIR file are stored.
  5085.  
  5086.       This  program  creates a FDL file with the specified name.  You must
  5087.       edit the MASTER.FAL file and make an entry for the FDL file.
  5088.  
  5089.  
  5090.  
  5091.  
  5092.  
  5093.  
  5094.                                    Chapter 8
  5095.  
  5096.                             Personal File Workspace
  5097.  
  5098.  
  5099.  
  5100.  
  5101.       In addition to the file libraries described in  Chapter  7,  TSX-BBS
  5102.       also  allows  each  user  to  have  a  "Personal File Workspace".  A
  5103.       personal file workspace is a private  file  storage  area  for  each
  5104.       user.   Unlike  the TSX-BBS file libraries, personal file workspaces
  5105.       do not have extended file descriptions; each file has a simple 1  to
  5106.       8  character file name and 1 to 3 character extension (i.e., it is a
  5107.       standard DOS file name).
  5108.  
  5109.       There are two primary uses for personal file workspaces:
  5110.  
  5111.       1.  Personal file workspaces are used as  transient  areas  to  hold
  5112.           files  being  uploaded  and downloaded to the Internet using the
  5113.           FTP program.  Since  the  FTP  program  always  transfers  files
  5114.           between  the  Internet  and  a  local  file area on the computer
  5115.           where FTP is running, it is necessary to use the  personal  file
  5116.           workspace  as  a  temporary  storage  area  to  which a user can
  5117.           upload and download using  X/Y/Z-modem  before  running  FTP  to
  5118.           send  a file or after running FTP to receive a file.  The use of
  5119.           personal file workspaces with FTP is described in Chapter 12.
  5120.  
  5121.       2.  Groups of users  can  use  a  shared  workspace  for  exchanging
  5122.           files.   For example, suppose your BBS is supporting a ham radio
  5123.           club that wishes to allow users to  upload  and  exchange  files
  5124.           among  members  of  the club.  You could do this by setting up a
  5125.           file library with access restricted to members of the club,  but
  5126.           the  club  members  would  have  to enter file descriptions when
  5127.           files were uploaded.  By assigning all members  of  the  club  a
  5128.           common  personal  file  workspace,  you  can provide them with a
  5129.           convenient, common  file  area  that  they  can  upload  to  and
  5130.           download  from without having to enter file descriptions.  Users
  5131.           are  allowed  to  delete  files   from   their   personal   file
  5132.           workspaces.
  5133.  
  5134.  
  5135.       8.1 Temporary and Permanent Workspaces
  5136.  
  5137.       The  sysop  can limit the use of personal file workspaces.  For each
  5138.       BBS user the sysop can authorize the following uses  of  a  personal
  5139.       file workspace:
  5140.  
  5141.       None  -- The user is not authorized to use a personal file workspace
  5142.           at all.  Note: if a user is authorized to use  FTP  but  is  not
  5143.           authorized  to  use a personal file workspace, TSX-BBS overrides
  5144.  
  5145.  
  5146.                                        85
  5147.  
  5148.       Chapter 8. Personal File Workspace                                86
  5149.  
  5150.  
  5151.           the  workspace  setting  and  allows  the  use  of  a  temporary
  5152.           workspace.
  5153.  
  5154.       Temporary  --  The user is allowed to use a personal file workspace,
  5155.           but all of the files in the workspace, as well as the  workspace
  5156.           directory  itself,  are  deleted  when  the user logs off of the
  5157.           BBS.  This is a reasonable  setting  to  use  if  you  are  just
  5158.           providing  the  workspace  as  a  transient area for files being
  5159.           transferred with FTP.  Users wishing to  send  a  file  can  use
  5160.           X/Y/Z-modem  to  upload  the file to the personal file workspace
  5161.           and then use FTP to send it through  the  Internet.   After  the
  5162.           file  is  sent  there  is no need to continue to store it in the
  5163.           personal file workspace.  Similarly, when receiving a file  with
  5164.           FTP,  the file is transferred to the personal file workspace and
  5165.           then X/Y/Z-modem is used to download  the  file  to  the  user's
  5166.           computer.   Once  the  file has been downloaded, it is no longer
  5167.           necessary  to  continue  storing  it  in   the   personal   file
  5168.           workspace.
  5169.  
  5170.       Permanent  --  The user is allowed to store files in a personal file
  5171.           workspace and the files are not deleted when the user logs  off.
  5172.           This  setting  is  nice  in that users can receive files through
  5173.           the Internet with FTP, log  off,  then  log  on  later  and  use
  5174.           X/Y/Z-modem  to download them to their personal computers.  This
  5175.           setting also prevents files from being deleted if  the  user  is
  5176.           inadvertently  disconnected  during  a  BBS  session.   However,
  5177.           unless you are careful, you may end up tying up a  lot  of  your
  5178.           disk  space storing files for your users.  A permanent workspace
  5179.           is appropriate for the situation where  your  BBS  is  providing
  5180.           common storage for a group of users who wish to exchange files.
  5181.  
  5182.       The  type  of  workspace  a  user  is authorized to use is specified
  5183.       using the SYSOP program.  Each  user's  authorization  entry  has  a
  5184.       field  named  "Personal file workspace".  When you select this field
  5185.       and press "Enter" a pulldown menu will appear  with  three  options:
  5186.       "None",  "Temporary", and "Permanent".  Highlight one of the options
  5187.       and press Enter to select it.  You can also assign  workspace  types
  5188.       and  size  limits using the user authorization class facility.  Each
  5189.       class has an associated workspace type and size limit.
  5190.  
  5191.  
  5192.       8.2 Workspace Size Limits
  5193.  
  5194.       The sysop can limit the amount  of  file  space  available  in  each
  5195.       user's   personal  file  workspace.   This  limit  applies  to  both
  5196.       temporary and permanent workspaces.  An abort will occur if  a  user
  5197.       attempts  to  upload  more files to his personal file workspace than
  5198.       the limit.  An abort will also occur if an attempt is  made  to  use
  5199.       FTP  to  receive  more  files  than  will  fit  in the personal file
  5200.       workspace.  The  user  can  delete  files  from  his  personal  file
  5201.       workspace  once  they are no longer needed in order to free up space
  5202.       for more files.
  5203.  
  5204.       The  workspace  size  limit  is  specified  as  part  of  the   user
  5205.       authorization  section  of  the SYSOP program.  Each user can have a
  5206.  
  5207.       Chapter 8. Personal File Workspace                                87
  5208.  
  5209.  
  5210.       different  limit.   The  value  is  specified  in  the  field  named
  5211.       "Personal  workspace size" that is part of each user's authorization
  5212.       entry.  If you specify a value of 0 for  this  field  (or  leave  it
  5213.       blank)  no limit is placed on the amount of file space that the user
  5214.       may use.  You may also specify workspace size limits as  part  of  a
  5215.       user authorization class.
  5216.  
  5217.  
  5218.       8.3 Workspace Directories
  5219.  
  5220.       The  sysop  can  assign a device and directory for a user's personal
  5221.       workspace or the sysop can allow TSX-BBS to create a directory  name
  5222.       based  on  the  user's  BBS  identification  number.   If  the sysop
  5223.       designates a particular directory, the workspace  is  treated  as  a
  5224.       permanent  workspace,  and  the  files are not deleted when the user
  5225.       logs off.  This overrides the  "Temporary"  workspace  setting.   If
  5226.       you  wish  to  have  several users share the same workspace you must
  5227.       specify  the  same  directory  name  for   each   user's   workspace
  5228.       directory.
  5229.  
  5230.       If  you  wish  to  designate a particular device and directory for a
  5231.       user's  workspace,  specify  the  directory  in  the   field   named
  5232.       "Personal   workspace   directory"  that  is  part  of  each  user's
  5233.       authorization entry.  If you leave this  field  blank,  a  workspace
  5234.       directory  is  created  for the user.  The user's BBS identification
  5235.       number (which is  unique  to  each  user)  is  used  to  create  the
  5236.       directory  name.   These workspace directories are created under the
  5237.       directory whose name is specified  in  the  "Temp  directory"  field
  5238.       that is part of the "General Setup" screen in the SYSOP program.
  5239.  
  5240.  
  5241.       8.4 Personal Workspace Management
  5242.  
  5243.       Users  may  list the files in their personal workspace, upload files
  5244.       to  it,  download  files  from  it,  and  delete  files  from  their
  5245.       workspace.   The  menu  action code to invoke the personal workspace
  5246.       browse function is "pws".  An example of a menu entry to invoke  the
  5247.       personal workspace management when the user types 'P' is
  5248.  
  5249.            $item key=P action=pws
  5250.  
  5251.       Within  menus and display files, you can use conditional expressions
  5252.       to determine if a user is authorized to use  a  personal  workspace.
  5253.       Within  a  logical  expression,  the  string  "pws"  has the value 0
  5254.       (false) if the user is not authorized to use a  personal  workspace.
  5255.       It  has  the  value  1  if  the  user  is authorized for a temporary
  5256.       workspace and it has the value 2 if the user  is  authorized  for  a
  5257.       permanent  workspace.  For example, the following is a fragment of a
  5258.       menu file that presents the personal workspace option only to  those
  5259.       users   who  are  authorized  to  use  personal  workspaces  (either
  5260.       temporary or permanent):
  5261.  
  5262.       Chapter 8. Personal File Workspace                                88
  5263.  
  5264.  
  5265.            @if(pws)@@eol@
  5266.                `Personal workspace
  5267.            @endif@@eol@
  5268.            $item key=P action=pws if(pws)
  5269.  
  5270.       The following logical expression would be true only for those  users
  5271.       who are authorized to use permanent workspaces: "pws==2".
  5272.  
  5273.       The  following  substitution  operators  may  be used within display
  5274.       files to insert information about the user's personal workspace:
  5275.  
  5276.       @pws@ -- Inserts a string indicating  what  type  of  personal  file
  5277.           workspace  the  user is authorized to use.  One of the following
  5278.           strings will be inserted: "None", "Temporary", "Permanent".
  5279.  
  5280.       @pwsavail@ -- Inserts the remaining number  of  bytes  available  in
  5281.           the user's personal file workspace.
  5282.  
  5283.       @pwsdir@  --  Inserts  the  name  of  the  user's personal workspace
  5284.           directory if a permanent directory has been  assigned.   Inserts
  5285.           nothing  if  the  user  does  not  have  a  permanent  workspace
  5286.           directory.
  5287.  
  5288.       @pwssize@ -- Inserts the total number of bytes that  may  be  stored
  5289.           in  the user's personal file workspace.  "(unlimited)" is stored
  5290.           if there is no limit.
  5291.  
  5292.  
  5293.  
  5294.  
  5295.  
  5296.  
  5297.                                    Chapter 9
  5298.  
  5299.                         Discussion Forums and Newsgroups
  5300.  
  5301.  
  5302.  
  5303.  
  5304.  
  5305.       9.1 Introduction
  5306.  
  5307.       TSX-BBS includes a powerful message  storage  and  retrieval  system
  5308.       that  is ideal for Usenet newsgroups, Fido echoes and other types of
  5309.       discussion forums.  The message system  can  efficiently  store  and
  5310.       recall  messages from thousands of message areas making it ideal for
  5311.       major Usenet storage sites.  The  maximum  number  of  messages  and
  5312.       message  areas  is  limited  only  by available disk space.  Message
  5313.       text compression is performed automatically  to  reduce  disk  space
  5314.       requirements.
  5315.  
  5316.       Message    categories    are    organized    in    a    hierarchical
  5317.       (tree-structured) fashion.  The top level can have  categories  such
  5318.       as  Usenet  and  Fido.   Within  the  Usenet  group  there  might be
  5319.       subcategories such as "alt" and  "comp".   Within  "usenet.alt"  you
  5320.       would  find additional subsubcategories, etc.  Users can explore the
  5321.       areas by moving up and down through the hierarchical  levels  or  by
  5322.       browsing  the  full set of forums as an alphabetical list.  By using
  5323.       sophisticated  indexing  techniques,  TSX-BBS  is  able  to  provide
  5324.       virtually  instantaneous  access  to  any  message  area.  Users can
  5325.       locate message areas by doing searches for words in the  area  name.
  5326.       Users  also  can  search for messages containing specified words and
  5327.       expressions in the body of the message.
  5328.  
  5329.       Within an area, messages are sorted by their creation  date  (rather
  5330.       than  the  date  they  were received by the board).  Messages on the
  5331.       same topic are grouped into "threads" making it easy  to  follow  an
  5332.       exchange  of messages.  TSX-BBS keeps track of the last message read
  5333.       in each area so that users can easily read new  messages  in  forums
  5334.       with  many  messages.   Reading messages in one area does not affect
  5335.       the last-message-read pointer for other areas.
  5336.  
  5337.       A "privilege expression" (see Chapter  4)  can  be  associated  with
  5338.       each  area  to  control which users can access the area.  This makes
  5339.       it easy to set up adult discussion  forums  and  to  create  private
  5340.       forums  for  groups  that  are using the board as a message exchange
  5341.       system.  Forum access restrictions are especially useful for  Usenet
  5342.       which  has a number of newsgroups which are not suitable for general
  5343.       distribution.
  5344.  
  5345.       A  QWK  facility  is  built  into  TSX-BBS  to   provide   efficient
  5346.       downloading of messages for off-line readers.
  5347.  
  5348.  
  5349.                                        89
  5350.  
  5351.       Chapter 9. Discussion Forums and Newsgroups                       90
  5352.  
  5353.  
  5354.       Users  can  interactively add new messages to forums or add messages
  5355.       through QWK processing.  Users can reply  to  messages  in  a  forum
  5356.       written  by  someone  else.   Depending  on  the  forums and certain
  5357.       options, new messages and  replies  may  be  broadcast  to  external
  5358.       networks.   Two  common  examples  are  Usenet and Fidonet messages.
  5359.       When a message is posted  in  a  forum  and  the  recipient  of  the
  5360.       message  is  a user on the local BBS, a notification message is sent
  5361.       to the user through E-mail.  Users  have  the  option  of  disabling
  5362.       E-mail notification messages in the "User configuration" menu.
  5363.  
  5364.       Forum  messages  may  be  posted  by  users  of  your  BBS using the
  5365.       interactive message  editor  built  into  TSX-BBS  as  well  as  QWK
  5366.       uploads.   Forum  messages  can  also be received from other systems
  5367.       through  networks  such  as  Fidonet  and  Usenet.   Forum  messages
  5368.       received   from   other   systems   may   come  in  through  dial-up
  5369.       connections,   satellite   receivers,   and    high-speed    network
  5370.       connections  such  as  Ethernet.   A  "tosser"  program  is  used to
  5371.       process messages received from other sites and post the messages  on
  5372.       your  discussion  forum.   Tosser programs can run while your BBS is
  5373.       in full operation with users browsing message areas.
  5374.  
  5375.       In addition to automated message addition through tossers, there  is
  5376.       automated  message  deletion  through  a program called the sweeper.
  5377.       It will expire messages based on several criteria including how  old
  5378.       the  message  is and how many messages are in the area.  The sweeper
  5379.       can be run while users are on the BBS and it can  even  run  at  the
  5380.       same time that the tossers are run.
  5381.  
  5382.       The  sysop  specifies  the  locations  of the forum control and data
  5383.       files though the SYSOP program.   To  allow  for  very  large  forum
  5384.       databases,  forum  control  and data files may be split across disks
  5385.       or networked systems.  TSX-BBS allows  up  to  64535  forums  to  be
  5386.       defined.
  5387.  
  5388.  
  5389.       9.2 Batch Addition and Deletion of Messages
  5390.  
  5391.       Forum  messages  may  be  posted  by  users  of  your  BBS using the
  5392.       interactive message  editor  built  into  TSX-BBS  as  well  as  QWK
  5393.       uploads.   Forum  messages  can  also be received from other systems
  5394.       through  networks  such  as  Fidonet  and  Usenet.   Forum  messages
  5395.       received   from   other   systems   may   come  in  through  dial-up
  5396.       connections,   satellite   receivers,   and    high-speed    network
  5397.       connections  such  as  Ethernet.   A  "tosser"  program  is  used to
  5398.       process messages received from other sites and post the messages  on
  5399.       your discussion forum.
  5400.  
  5401.       Since  the message files received through different connection types
  5402.       (satellite,  dial-up,  etc.)  tend  to  be  in  slightly   different
  5403.       formats,  a  different  tosser is required for each style of message
  5404.       file.  After a received message packet file has been  processed  and
  5405.       the  messages  added to your forums, the packet file may be deleted.
  5406.       The tossers may process many files, each  of  which  may  have  many
  5407.       messages.   When  the  tosser encounters a message for a forum which
  5408.       does not yet exist it can create the forum automatically and  report
  5409.  
  5410.       Chapter 9. Discussion Forums and Newsgroups                       91
  5411.  
  5412.  
  5413.       the  creation  to the sysop.  Tossing under TSX-BBS is very fast and
  5414.       is very efficient.
  5415.  
  5416.  
  5417.       9.3 How to expire messages in forums.
  5418.  
  5419.       After some period of time it will be necessary  to  delete  messages
  5420.       in  forums  since  disk  space  is  limited.   The  sweeper  program
  5421.       FSWEEP.EXP actually does the message deletion.  Its  operation  will
  5422.       be  described in Section 9.4.  This section gives an overview of the
  5423.       processing and describes how  the  SYSOP  program  can  be  used  to
  5424.       specify the required parameters.
  5425.  
  5426.       There  are  three  main  things  which control message deletion in a
  5427.       forum: the age of  the  message  in  days,  the  minimum  number  of
  5428.       messages  to  keep in a forum, and the maximum number of messages to
  5429.       allow in a forum.  In order for messages to be deleted some  or  all
  5430.       of the three parameters must be specified.
  5431.  
  5432.       One of the following combinations must be specified.
  5433.  
  5434.       1.  max number of messages.
  5435.  
  5436.       2.  max number of days.
  5437.  
  5438.       3.  max number of messages and max number of days.
  5439.  
  5440.       4.  max  number of messages and max number of days and min number of
  5441.           messages.
  5442.  
  5443.       5.  max number of days and min number of messages.
  5444.  
  5445.       Note that it is nonsensical to specify  a  minimum  number  of  days
  5446.       without  also  specifying the maximum number of days.  Consider that
  5447.       if only the max number of days and  the  min  number  of  days  were
  5448.       specified  then  messages would be deleted until only the max number
  5449.       remained.  Since this must be greater than the min  number  of  days
  5450.       it was not used in deciding to delete messages.
  5451.  
  5452.       The  sweeper  must  be told what these parameters are for each forum
  5453.       that it processes or no messages will  be  deleted.   It  does  this
  5454.       through  command  line parameters or by collecting information which
  5455.       is associated with the  forum.   The  command  line  parameters  are
  5456.       specified  when  the  program  is  run  and are described in Section
  5457.       9.4.1.
  5458.  
  5459.       Each forum or hierarchy of forums can be assigned unique values  for
  5460.       these   parameters   with  the  SYSOP  program.   These  values  are
  5461.       specified during forum creation or modification in  the  appropriate
  5462.       screens.    Section   15.10.3  describes  forum  creation.   Section
  5463.       15.10.4 describes forum modification.
  5464.  
  5465.       Like  forum  privileges,  the  values  for  these   parameters   are
  5466.       inherited   and  can  be  overridden.   For  example,  if  the  name
  5467.       component "usenet.alt" were given the number of days to expire as  7
  5468.  
  5469.       Chapter 9. Discussion Forums and Newsgroups                       92
  5470.  
  5471.  
  5472.       then  all  of the forums under "usenet.alt" would have an expiration
  5473.       of 7 days.  If the name "usenet.alt.cooking"  were  then  given  the
  5474.       number  of  days to expire as 14 this would override the value of 7.
  5475.       All forums under "usenet.alt.cooking" would then  have  14  days  as
  5476.       the number of days to expire.  If the forum
  5477.       "usenet.alt.cooking.chili"  were  given  a value of 21 as the number
  5478.       of days to  expire  then  this  would  override  the  14  days  from
  5479.       "usenet.alt.cooking".
  5480.  
  5481.       This  scheme  allows  complete flexibility for specifying expiration
  5482.       parameters.  It also allows values specified in one place to  affect
  5483.       potentially  thousands  of  forums  but  also  allows for individual
  5484.       tailoring for specific cases.  This makes for ease  of  maintenance.
  5485.       If  all  the forum's expiration parameters are specified in this way
  5486.       then  the  sweeper  program  can  simply   be   scheduled   to   run
  5487.       periodically  without having to specify any unique parameters.  This
  5488.       can result in more automatic processing of forum sweeping  and  less
  5489.       system management
  5490.  
  5491.  
  5492.       9.4 Expiring messages; The Sweeper program FSWEEP
  5493.  
  5494.       Once  messages  are  in  the  forums  they  remain  there until they
  5495.       expire.  It is the job  of  the  program  called  FSWEEP  to  delete
  5496.       expired  messages  from the forum message files.  The sweeper can be
  5497.       run at any time, even while users are active  in  the  forums  being
  5498.       swept.   Typically,  the  forum sweeper is scheduled to run at night
  5499.       when the general BBS load is light.
  5500.  
  5501.       Its basic function is to delete expired messages  from  forums.   In
  5502.       addition, it can:
  5503.  
  5504.         . Restrict a forum to a certain number of messages.
  5505.  
  5506.         . Ensure that a certain minimum number of messages are retained.
  5507.  
  5508.         . Initialize  a  forum,  which deletes all messages and resets the
  5509.           next available message to 1.
  5510.  
  5511.         . Only sweep forums  which  have  been  modified  since  the  last
  5512.           sweep.
  5513.  
  5514.         . Sweep a single forum specified via name or number.
  5515.  
  5516.         . Sweep  a  group of forums which have a common name prefix.  This
  5517.           is useful for sweeping specific grand divisions.
  5518.  
  5519.         . Expire messages based on when they were  written  or  when  they
  5520.           were added to the forum.
  5521.  
  5522.       When  tossers  and  the sweeper work in conjunction the sweeper will
  5523.       only attempt to process forums which were specifically added  to  by
  5524.       a  tosser.   Since  not  all  forums  are generally added to between
  5525.       sweeper runs  this  can  greatly  increase  the  efficiency  of  the
  5526.  
  5527.       Chapter 9. Discussion Forums and Newsgroups                       93
  5528.  
  5529.  
  5530.       sweeper.   Like tossing, sweeping out old messages is also very fast
  5531.       under TSX-BBS.
  5532.  
  5533.       9.4.1 Sweeper command options
  5534.  
  5535.       The sweeper can be told what to do through  command  line  switches.
  5536.       Each  switch governs some aspect of the operation.  The switches are
  5537.       specified here.  More than one switch  can  be  specified,  although
  5538.       not  all  combination  are  legal.  Illegal combinations are flagged
  5539.       when the program starts.
  5540.  
  5541.       As mentioned, the number of days, the  minimum  number  of  messages
  5542.       and  the  maximum number of messages can be specified for a forum or
  5543.       group of forums through the SYSOP  program.   The  values  for  min,
  5544.       max,  and  number  of  days  must  be  specified  either through the
  5545.       command options described here or through  the  SYSOP  program.   If
  5546.       there  are  no  values  specified  the  sweeper  will not delete any
  5547.       messages.  This can be a useful way to have permanent forums.
  5548.  
  5549.       Values for the min number of messages, max number of  messages,  and
  5550.       max  number of days can be specified either through the command line
  5551.       options  or  the   options   derived   from   the   forums   through
  5552.       specification  of  the  SYSOP program, or both.  In other words, the
  5553.       value for the number of days can be specified on  the  command  line
  5554.       while the maximum number of messages can be derived from the forum.
  5555.  
  5556.       The  values  from the command line are overridden by the values from
  5557.       the forum, so if a max number of days is specified  on  the  command
  5558.       line  and it is defined with the forum the value from the forum will
  5559.       take precedence.
  5560.  
  5561.         . /MINI (default)
  5562.  
  5563.           This tells the sweeper to perform a 'mini' sweep.   The  sweeper
  5564.           will  only  process  forums  which have had messages added since
  5565.           the last sweep.  This is the default.  The  only  down  side  to
  5566.           using  /MINI  is  that  it is possible for a forum which has not
  5567.           had any new messages added to eventually contain messages  which
  5568.           are  all  expired  and which should be deleted.  The way to deal
  5569.           with this is to periodically (say, once a month) perform a  full
  5570.           sweep.   An  example  of how this might be done automatically is
  5571.           demonstrated in the BBS:FSWEEP.CMD command procedure.
  5572.  
  5573.         . /FULL
  5574.  
  5575.           This tells the sweeper to process  all  forums,  not  just  ones
  5576.           which have had new messages added since the last sweep.
  5577.  
  5578.         . /CLUSTEROPT (default)
  5579.  
  5580.           This  tells  the  sweeper  to not bother sweeping a forum if the
  5581.           size of the data file falls beneath the size of a cluster.   The
  5582.           reason  is  that if the data file is less than a cluster in size
  5583.           no  disk  space  would  be  reclaimed  for  other  messages   by
  5584.           sweeping.   Bypassing  the  forum  saves  time during the sweep.
  5585.  
  5586.       Chapter 9. Discussion Forums and Newsgroups                       94
  5587.  
  5588.  
  5589.           This actually allows the forum to have a few  more  messages  in
  5590.           it with no additional overhead.
  5591.  
  5592.         . /NOCLUSTEROPT
  5593.  
  5594.           This  switch  is  specified if the sysop wants to more precisely
  5595.           control the messages without regard to disk  space  reclamation.
  5596.           A forum will always be processed.
  5597.  
  5598.         . /NUMBER=n
  5599.  
  5600.           This  switch  is  used  to  instruct  the  sweeper  to process a
  5601.           specific forum whose number is specified.  The value 'n' is  the
  5602.           forum number.  An example invocation is
  5603.  
  5604.                RUN BBSBIN:FSWEEP/NUMBER=1234
  5605.  
  5606.         . /NAME=name
  5607.  
  5608.           This  switch  is  used  to  instruct  the  sweeper  to process a
  5609.           specific forum whose name is specified.   The  value  'name'  is
  5610.           the forum name.  An example invocation is
  5611.  
  5612.                RUN BBSBIN:FSWEEP/NAME=usenet.alt.cooking.chili
  5613.  
  5614.         . /DAYS=n (default=7)
  5615.  
  5616.           This  tells  the  sweeper  how  many  days  to allow messages to
  5617.           remain in the forum before expiration.  The  value  'n'  is  the
  5618.           number of days.  An example invocation is
  5619.  
  5620.                RUN BBSBIN:FSWEEP/DAYS=10
  5621.  
  5622.         . /MAXMSGS=n (default = no maximum)
  5623.  
  5624.           This  tells  the  sweeper  to restrict the number of messages in
  5625.           the forum to  the  specified  maximum.   "nnn"  is  the  maximum
  5626.           number.   After all the expired messages are deleted the sweeper
  5627.           will delete enough of the older messages to  reduce  the  number
  5628.           of messages to below this parameter.  An example invocation is
  5629.  
  5630.                RUN BBSBIN:FSWEEP/MAXMSGS=250
  5631.  
  5632.         . /INIT
  5633.  
  5634.           This  tells  the  sweeper  to delete all messages from the forum
  5635.           and reset the next available message count to 1.
  5636.  
  5637.         . /MINMSGS=n (default=no minimum)
  5638.  
  5639.           This tells the sweeper to ensure  that  there  are  at  least  a
  5640.           specified  minimum  number  of messages left in the forum.  Even
  5641.           if a set of messages are  expired  it  is  sometimes  useful  to
  5642.           leave  them  around  so  that browsing users can see the kind of
  5643.           messages available in a forum.   If  deleting  expired  messages
  5644.  
  5645.       Chapter 9. Discussion Forums and Newsgroups                       95
  5646.  
  5647.  
  5648.           would  reduce  the count of messages below the specified minimum
  5649.           they will be left in the forum.
  5650.  
  5651.         . /WRDATE
  5652.  
  5653.           This switch tells the sweeper to expire  messages  by  the  date
  5654.           they  were  written, not the date they were posted.  It is quite
  5655.           common for messages to be one or more days old by the time  they
  5656.           are added to the forum.
  5657.  
  5658.         . /HELP
  5659.  
  5660.           This will print out some help on the sweeper and exit.
  5661.  
  5662.         . /VERBOSE
  5663.  
  5664.           This  is  a  debugging option which prints all messages directed
  5665.           to log files to the terminal.
  5666.  
  5667.         . /BASENAME=name
  5668.  
  5669.           This switch is used to tell the  sweeper  to  restrict  sweeping
  5670.           operations  to  a  set of forums which begin with a common name.
  5671.           This  can  be  used  to  restrict  a  sweep  to  certain   grand
  5672.           divisions,  for  instance,  or  certain  forums  under any name.
  5673.           This may be necessary due to a very large  volume  of  messages,
  5674.           for  instance,  or  to  implement  special  limits  for a set of
  5675.           names.  Here are several examples which each sweep  a  different
  5676.           section.   In this example we see that it is possible to specify
  5677.           different expiration limits for different areas.
  5678.  
  5679.                RUN BBSBIN:FSWEEP/DAYS=10/BASENAME=fido
  5680.                RUN BBSBIN:FSWEEP/DAYS=14/BASENAME=local.discuss
  5681.                RUN BBSBIN:FSWEEP/DAYS=2/BASENAME=usenet.comp.ibm
  5682.  
  5683.       In general, one  switch  which  selects  the  forum  or  forums  for
  5684.       processing  can  be  combined  with  switches  which  establish  the
  5685.       criteria for message deletion.
  5686.  
  5687.       The switches /NAME, /NUMBER, /BASENAME, /FULL, and /MINI select  the
  5688.       forums  for processing.  Each is a subsetting option which restricts
  5689.       the scope of the  sweep.   Normally  only  one  is  specified.   The
  5690.       exception  is  that  /BASENAME can be specified with /FULL or /MINI.
  5691.       It may be desirable to limit a sweep of forums under a base name  to
  5692.       only those modified.
  5693.  
  5694.       The  switches  which establish the criteria for message deletion are
  5695.       either /INIT or some combination  of  /MAXMSGS,  /MINMSGS,  /WRDATE,
  5696.       /DAYS,  and  /CLUSTEROPT.   The /INIT switch cannot be combined with
  5697.       any of /MAXMSGS, /MINMSGS, /WRDATE, /DAYS, and /CLUSTEROPT.
  5698.  
  5699.       You can specify  any  of  /MAXMSGS,  /MINMSGS,  /WRDATE,  /DAYS,  or
  5700.       /CLUSTEROPT  together, except that if /MINMSGS and /MAXMSGS are both
  5701.       specified /MINMSGS must be less than /MAXMSGS.
  5702.  
  5703.       Chapter 9. Discussion Forums and Newsgroups                       96
  5704.  
  5705.  
  5706.       9.4.2 Examples
  5707.  
  5708.       This example demonstrates the default.  It  performs  a  mini  sweep
  5709.       and   expires  messages  after  7  days.   Cluster  optimization  is
  5710.       performed.
  5711.  
  5712.            !
  5713.            ! These two commands are equivalent
  5714.            !
  5715.            RUN BBSBIN:FSWEEP
  5716.            RUN BBSBIN:FSWEEP/DAYS=7/CLUSTEROPT/MINI
  5717.  
  5718.       This example sweeps only  the  forums  underneath  "usenet.alt.cars"
  5719.       and  deletes messages over 10 days old.  Only forums which have been
  5720.       modified since the last sweep will be selected for sweeping.
  5721.  
  5722.            RUN BBSBIN:FSWEEP/BASENAME=usenet.alt.cars/DAYS=10
  5723.  
  5724.       This example sweeps only  the  forums  underneath  "usenet.alt.cars"
  5725.       and  deletes  messages  over 10 days old.  All forums will be swept,
  5726.       regardless of whether or not they have had messages added to them.
  5727.  
  5728.            RUN BBSBIN:FSWEEP/BASENAME=usenet.alt.cars/FULL/DAYS=10
  5729.  
  5730.       This example sweeps all forums restricting the  number  of  messages
  5731.       to 40.
  5732.  
  5733.            RUN BBSBIN:FSWEEP/FULL/MAXMSGS=40
  5734.  
  5735.       This  example  initializes  forum  number  1237.   All  messages are
  5736.       deleted and the next available message number is reset to 1.
  5737.  
  5738.            RUN BBSBIN:FSWEEP/INIT/NUMBER=1237
  5739.  
  5740.       This example performs a sweep on the  forum  "usenet.alt.chili"  and
  5741.       expires  messages  over  4  days  old.  It also specifies that there
  5742.       should be a minimum of 10 messages kept.  This may means  that  some
  5743.       expired  messages  will  be  retained  in  order to keep the minimum
  5744.       requested.
  5745.  
  5746.            RUN BBSBIN:FSWEEP/NAME=usenet.alt.chili/DAYS=4/MINMSGS=10
  5747.  
  5748.       9.4.3 Scheduling the sweeper
  5749.  
  5750.       The sweeper is scheduled through the scheduling  utility  in  SYSOP.
  5751.       The  command procedure FSWEEP.CMD invokes the sweeper.  This command
  5752.       procedure contains the command with options to invoke  the  sweeper.
  5753.       The scheduling utility is described in Chapter 20.
  5754.  
  5755.  
  5756.       9.5 Forum Identification and Naming Conventions
  5757.  
  5758.       Each  forum  has  a unique identifying number and a name.  The forum
  5759.       number is in the range 1000 to 65535, inclusive.  The forum name  is
  5760.       the  name  of  the  topic of the forum.  The names follow the usenet
  5761.  
  5762.       Chapter 9. Discussion Forums and Newsgroups                       97
  5763.  
  5764.  
  5765.       newsgroup naming convention of name  pieces  separated  by  periods.
  5766.       An  example  might be "alt.cooking.chili".  There is an actual limit
  5767.       of 19 name pieces and a limit  of  40  characters  per  name  piece.
  5768.       Most  forum names are rarely longer than 30 bytes and generally have
  5769.       4 or 5 name pieces at most.  Names may not contain spaces but  there
  5770.       are  few  restrictions  aside from that.  Letters, numbers, and most
  5771.       punctuation characters are allowed.
  5772.  
  5773.       Each forum has one control and one data file that contain the  forum
  5774.       data.   The  location  of  these  two files is specified through the
  5775.       SYSOP program.
  5776.  
  5777.       TSX-BBS was designed to handle efficiently thousands of forums  each
  5778.       with  potentially  dozens  or  hundreds of messages.  In addition to
  5779.       forums  which  mirror  Usenet  newsgroups,  TSX-BBS   supports   the
  5780.       addition  of  message  bases  from  Fidonet  echoes.  There are many
  5781.       other types of networks which have discussion areas and the  TSX-BBS
  5782.       forum  processing  is  designed  to include them.  You can also have
  5783.       local forums for topic  such  as  classified  ads,  local  politics,
  5784.       around-town  discussions, etc.  Local forums allow your BBS users to
  5785.       exchange messages but the messages are not sent to any other sites.
  5786.  
  5787.       The word hierarchy is defined as "Any system of  persons  or  things
  5788.       ranked   one   above  another".   There  is  a  hierarchical  naming
  5789.       convention in TSX-BBS forums.
  5790.  
  5791.       If you have had experience with the DOS file system  then  you  have
  5792.       already had experience with a hierarchical naming convention.
  5793.  
  5794.       As  you  are  probably  aware,  in  the  DOS  file system there is a
  5795.       concept  of  directories  which   can   contain   files   or   other
  5796.       directories.   The  topmost  directory is called the root directory.
  5797.       If the directory structure was diagramed, it would resemble a tree.
  5798.  
  5799.       The same file name  can  exist  in  more  than  one  directory.   To
  5800.       uniquely  identify  a  file  you must specify not only the file name
  5801.       but also the directory path in which the name occurs.
  5802.  
  5803.       All of this should be quite familiar to any DOS or Unix  user.   The
  5804.       TSX-BBS  forum  naming  convention  is  very similar to the DOS file
  5805.       system naming conventions.  Here is a list of similarities.
  5806.  
  5807.         . Instead  of  directories  and  file  names   there   are   "name
  5808.           components".
  5809.  
  5810.         . Instead  of  names  separated  by '\', forum name components are
  5811.           separated by a single period ('.').
  5812.  
  5813.         . An example DOS file name  is  "\LIST\NEB\WAT.LOG".   An  example
  5814.           TSX-BBS forum name is "usenet.alt.cooking.chili".
  5815.  
  5816.         . In  DOS, the lowest level name is a file.  In TSX-BBS the lowest
  5817.           level  name  component  represents  a   forum   which   contains
  5818.           messages.
  5819.  
  5820.       Chapter 9. Discussion Forums and Newsgroups                       98
  5821.  
  5822.  
  5823.         . In  DOS,  a  directory  can  contain  many  other directories or
  5824.           files.  In TSX-BBS, a  particular  name  component  can  contain
  5825.           other   name   components   or  forums.   Thus  under  the  name
  5826.           "usenet.alt.cooking" there could be names "tex-mex",  "chinese",
  5827.           "italian.northern",  "italian.southern",  and many others.  Each
  5828.           would have the prefix "usenet.alt.cooking".
  5829.  
  5830.         . A name component may refer to a forum  which  actually  contains
  5831.           messages  or  it  may  not.   The  analogy  with  the  DOS  file
  5832.           structure is that a name such as "\HELP\SUBJ1\UPDATE" may  be  a
  5833.           file or it may be another directory.
  5834.  
  5835.         . DOS  has the concept of the root directory.  In TSX-BBS there is
  5836.           no root name per se, but the top level name is called the  grand
  5837.           division.
  5838.  
  5839.         . Both  the  SYSOP  and  users can browse the forum name hierarchy
  5840.           just as one would peruse the DOS file system.  The displays  for
  5841.           both  the  SYSOP  and  users will display a list of names at the
  5842.           current level and have options for going "up"  and  "down".   In
  5843.           DOS,  the  DIR  command  displays the names at the current level
  5844.           and the CD command allows you to go up  or  down  the  directory
  5845.           hierarchy.   Unlike  DOS,  both  the SYSOP and the user displays
  5846.           will display all the forum names alphabetically.
  5847.  
  5848.         . Unlike DOS, a name component can contain both a forum and  refer
  5849.           to  other  name  components.   Under  DOS,  a  name  is either a
  5850.           directory or a file, but not  both.   Thus,  there  could  be  a
  5851.           forum   called   "usenet.alt.cooking.italian"   which   contains
  5852.           messages and forums called
  5853.           "usenet.alt.cooking.italian.northern" and
  5854.           "usenet.alt.cooking.italian.southern"   which    each    contain
  5855.           messages.
  5856.  
  5857.       Each  forum  has a unique number between 1000 and 64535.  Each forum
  5858.       is defined by two files, a control file and a data file.  The  names
  5859.       of  the  files  are  "Fn.CTL"  and  "Fn.DAT", where 'n' is the forum
  5860.       number.  Names which are not forums do not have control files.
  5861.  
  5862.       Forum control and data files are located in  subdirectories  beneath
  5863.       "BBS:\FORDATA\",  by  default.   The  SYSOP  program  can be used to
  5864.       tailor the  location  of  the  control  files  based  on  the  forum
  5865.       numbers.   This allows the sysop to break up areas across disks when
  5866.       there are many large forums.
  5867.  
  5868.       The SYSOP program is used to  create,  delete,  and  modify  forums.
  5869.       The  control  file BBS:FTREE.DAT contains the forum definitions used
  5870.       by the SYSOP program.  Section  15.10.3  describes  forum  creation.
  5871.       Section   15.10.5   describes   forum   deletion.   Section  15.10.4
  5872.       describes forum modification.
  5873.  
  5874.       In TSX-BBS there is a convention that the topmost name  is  reserved
  5875.       for  the  type  of  network  to  which a set of forums belong.  This
  5876.       topmost name is called the "Grand Division".  For Usenet  newsgroups
  5877.  
  5878.       Chapter 9. Discussion Forums and Newsgroups                       99
  5879.  
  5880.  
  5881.       this  name is "usenet".  For Fidonet echoes this name is "fido".  As
  5882.       other networks are incorporated more names will be assigned.
  5883.  
  5884.       The grand division name is mainly  used  by  tossers.   Tossers  are
  5885.       programs  which  break up container files and add messages to forums
  5886.       automatically.  The grand  division  name  enables  tossers  to  add
  5887.       thier messages to the appropriate set of forums.
  5888.  
  5889.       For  forums  which  are locally defined and which contain only local
  5890.       messages the grand division name "local" is recommended.
  5891.  
  5892.  
  5893.       9.6 Forum Access Privileges
  5894.  
  5895.       By default, users can read and write messages in all forums and  can
  5896.       delete  messages  which they had previously posted.  If the user has
  5897.       SYSOP privilege they can delete messages in any  forum.   Using  the
  5898.       SYSOP  program,  the  sysop can erase all messages in a forum.  This
  5899.       basic  functionality  will  probably  suffice  for  most  BBS's   so
  5900.       understanding   this   section  is  not  required  for  basic  forum
  5901.       operation.
  5902.  
  5903.       For various reasons it  may  be  desirable  to  restrict  access  to
  5904.       certain  forums  to  certain  users  or to certain classes of users.
  5905.       Each forum may have three kinds of privileges  associated  with  it:
  5906.       the  privilege  to  even  be  aware  of  it  (read  privilege),  the
  5907.       privilege to post to it (write  privilege),  and  the  privilege  to
  5908.       delete any message from the forum (control privilege).
  5909.  
  5910.       When  the user lacks read privilege for a forum he is unaware of its
  5911.       existence; the name does not appear on any of the forum menus or  on
  5912.       the list of forums the user may download.
  5913.  
  5914.       Once  privileges  are  associated  with  forums  the users trying to
  5915.       access the  forums  must  have  the  privileges  specified  for  the
  5916.       operations they are trying to perform.
  5917.  
  5918.       For  a  general  discussion of privileges and privilege strings, see
  5919.       Section 4,  page  31.   A  basic  understanding  of  privileges  and
  5920.       privilege  strings  is  necessary  in order to understand how to use
  5921.       privileges with forums.
  5922.  
  5923.       Privilege strings  are  used  to  describe  privileges.   The  SYSOP
  5924.       program  is  used  to  define these privileges in a way described in
  5925.       Section 15.10.3, page 165.  Remember that forum names  are  composed
  5926.       of  name  pieces separated with '.'.  In TSX-BBS each name component
  5927.       can have read, write, and control privilege  expressions  associated
  5928.       with  it.   Privileges  in  earlier parts of the name apply to later
  5929.       parts of the name.
  5930.  
  5931.       As an example, assume we have the  forum  "alt.cooking.chili".   and
  5932.       assume  that  the sysop defines the privilege "S50" and decides that
  5933.       this will be associated with read privilege for forums.
  5934.  
  5935.       Chapter 9. Discussion Forums and Newsgroups                      100
  5936.  
  5937.  
  5938.       If the read privilege "S50" is associated with "alt" then  the  read
  5939.       privilege  "S50"  is  automatically  associated  with  "cooking" and
  5940.       "chili".  This property is called  inheritance  and  makes  it  very
  5941.       easy  to  assign  a  specific  privilege  to  an entire hierarchy of
  5942.       forums.
  5943.  
  5944.       If, for example, there were  another  forum  called  "alt.cars.ford"
  5945.       then  the user would have to have privilege "S50" in order to access
  5946.       it because the "S50" associated  with  "alt"  is  inherited  by  the
  5947.       "cars.ford" portion of the name.
  5948.  
  5949.       It  is  important  to  note that that it is not necessary to have an
  5950.       actual forum associated with the name where the  privilege  resides,
  5951.       although  there  can  be an actual forum there.  In the example just
  5952.       given   there    are    two    forums:    "alt.cooking.chili"    and
  5953.       "alt.cars.ford".   The  privilege  "S50" is associated with the name
  5954.       "alt".  Note that there is not a forum called "alt"; it  is  just  a
  5955.       part  of  the  name  of  other forums.  If there were a forum called
  5956.       "alt" (and that would be permissible) a  user  would  have  to  have
  5957.       "S50" privilege to read it.
  5958.  
  5959.       As  another  example,  assume that we define the privilege "S60" and
  5960.       assign it to be the read privilege for the name  "alt.cars".   Thus,
  5961.       in  order to read "alt.cars.ford" the user must have two privileges,
  5962.       "S50" in order to see forums underneath "alt" and "S60" in order  to
  5963.       see forums underneath "alt.cars".
  5964.  
  5965.       Privilege  inheritance  is  a very powerful tool which requires some
  5966.       thought in order to be used effectively.  As  mentioned,  there  can
  5967.       be  read,  write,  and control privileges associated with every name
  5968.       component.  While it is not  necessary  that  every  name  component
  5969.       have  privileges, the flexibility is there for almost any imaginable
  5970.       combination  of  user  access.   Also,  remember  that   there   are
  5971.       reasonable  defaults  for  forum  access  so  forum  privileges  are
  5972.       something that you can grow into when the need arises.
  5973.  
  5974.       This concept of inheritance applies in the same  way  to  write  and
  5975.       control   privilege.    While   control   privilege  is  more  rare,
  5976.       restricting write privilege is a common desire.  Since writing to  a
  5977.       forum  may  result  in sending messages out to the rest of the world
  5978.       it would be prudent to restrict write  privilege  to  authorized  or
  5979.       known users.
  5980.  
  5981.  
  5982.       9.7 Forum Creation and Access Issues
  5983.  
  5984.       For  an introduction to tossers see Section 9.2.  One feature of the
  5985.       tossers provided with TSX-BBS is the ability to create  new  forums.
  5986.       For  networks  such as Usenet and Fido it is not always easy to find
  5987.       out the names of all the  forums  because  new  forums  are  created
  5988.       periodically.   In  the case of some networks (such as Usenet) there
  5989.       is no official mechanism to notify sysops that new forums have  come
  5990.       into existence.
  5991.  
  5992.       Chapter 9. Discussion Forums and Newsgroups                      101
  5993.  
  5994.  
  5995.       By  default,  the  TSX-BBS  tossers  will  automatically  create new
  5996.       forums when messages are received for  forums  that  do  not  exist.
  5997.       When  new forums are created a notification line is written to a log
  5998.       file named BBS:FNEW.LOG.  Log files are discussed  in  Section  9.9.
  5999.       The  sysop  can  use  this file to review the new forums and keep or
  6000.       delete them as desired.  By default, users can  see  new  forums  as
  6001.       soon as they are created.
  6002.  
  6003.       9.7.1 Restricting the Creation of New Forums
  6004.  
  6005.       While  automatic  creation  of  new forums is quite useful there are
  6006.       valid reasons for wanting to restrict this capability.   One  reason
  6007.       is  disk  space.   Once a forum is created is can begin accumulating
  6008.       messages on all subsequent tosser runs.  The other is  a  matter  of
  6009.       focus;  the sysop may only be interested in a small subset of topics
  6010.       and will not want to be constantly deleting new forums.   There  are
  6011.       two tools for handling this.
  6012.  
  6013.       The  main tool is simply an option which says whether or not tossers
  6014.       are or are not able to create  new  forums.   This  applies  to  all
  6015.       TSX-BBS  tossers  and  simply disables that functionality.  When the
  6016.       tossers attempt to add a message to a forum which  does  not  exists
  6017.       it  will attempt to create the forum and fail.  A message indicating
  6018.       failure is written to the log file BBS:FERROR.LOG.
  6019.  
  6020.       If tossers cannot create forums the sysop must manually  create  the
  6021.       desired  forums  through  any  of  the  means available to the SYSOP
  6022.       program; these are discussed in Section 15.10.3.
  6023.  
  6024.       The other tool restricts addition on the basis of the  name  of  the
  6025.       forum.   This  only  comes  into play if the global option to create
  6026.       forums is enabled.   In  other  words,  if  new  forum  creation  is
  6027.       disabled via the global option then this mechanism is disabled.
  6028.  
  6029.       Forum  names  are  composed of name pieces separated by periods.  An
  6030.       example might be "alt.cooking.chili".  The sysop  may  specify  that
  6031.       no  new  forums  are  to be created "under" a certain name.  In this
  6032.       context "chili" is under "cooking" and "cooking" is under "alt".
  6033.  
  6034.       For   instance,   we   can   modify   the   "cooking"   portion   of
  6035.       "alt.cooking.chili"  to  indicate  that  no  new  forums  should  be
  6036.       created under  "cooking".   Thus,  when  a  message  for  the  forum
  6037.       "alt.cooking.cajun"  came  in  the tosser would discover that no new
  6038.       forums under "cooking" are to be allowed and the  message  would  be
  6039.       discarded.   However,  if a message for "alt.cars.fords" came in the
  6040.       tosser would create the forum since  there  was  no  restriction  on
  6041.       names under "alt".
  6042.  
  6043.       The  SYSOP  control screen for forums, described in Section 15.10.4,
  6044.       allows the specification of 'Y' or 'N' for  autoadd.   This  enables
  6045.       or  disables,  respectively,  the  creation  of new forums under the
  6046.       name component being modified.
  6047.  
  6048.       Chapter 9. Discussion Forums and Newsgroups                      102
  6049.  
  6050.  
  6051.       9.7.2 Previewing New Forums Before Users
  6052.  
  6053.       As mentioned, users can  see  new  forums  when  they  are  created.
  6054.       There  are  reasons  that  the  sysop may want to preview the forums
  6055.       before allowing users  to  access  them.   The  main  reason  is  to
  6056.       confirm  that  the  forum  does not contain anything which the sysop
  6057.       may consider to be inappropriate  for  general  access.   The  other
  6058.       reason  is  clerical: to confirm that the new forum created is not a
  6059.       misspelled version of another.
  6060.  
  6061.       To prevent users from seeing new forums  the  sysop  uses  privilege
  6062.       expressions  to  prevent  read  access to the new forums.  Privilege
  6063.       expressions  and  forums  are  discussed   in   Section   9.6.    In
  6064.       particular,  the concept of privilege inheritance can come into play
  6065.       when working with new forum privileges.   Examples  will  illustrate
  6066.       this, but the concept must be understood first.
  6067.  
  6068.       While  its use is not required, there is a built-in privilege called
  6069.       "New Forum Review" (P11) which can  be  used  for  this  capability.
  6070.       When  the  tosser creates a new forum it assigns values to the read,
  6071.       write, and control privileges for the forum that is  being  created.
  6072.       The  privilege  expressions  to be assigned to new forums created by
  6073.       tossers are specified  in  the  SYSOP  program  in  the  "New  forum
  6074.       defaults"  screen,  discussed  in Section 15.10.7.1.  By setting the
  6075.       read privilege to P11 in this screen  new  forums  will  be  created
  6076.       with  this privilege.  Only users with this privilege or sysop (P14)
  6077.       privilege will be able to review the new forums.
  6078.  
  6079.       As mentioned, the tosser writes a  line  to  the  file  BBS:FNEW.LOG
  6080.       when  it  creates  a new forum.  The sysop may then review these new
  6081.       forums so listed.  After deciding which forums to  keep,  the  sysop
  6082.       can  reset  the read privilege of the desired forums.  Resetting the
  6083.       privilege to an empty string will result  in  the  forum  inheriting
  6084.       the  privileges  already  associated  with  its  higher  level  name
  6085.       components.  If none of the name pieces has  any  privilege  strings
  6086.       associated  with  them then users will have read and write access to
  6087.       the forum, but not control access.
  6088.  
  6089.       9.7.3 Example of New Forum Management
  6090.  
  6091.       To illustrate this, assume that there are no forums and assume  that
  6092.       the  sysop  has  set  the  read  privilege  to P11 in the "New forum
  6093.       defaults" screen.  Also, assume the global  "create  forums"  option
  6094.       is enabled so that tossers may try to add new forums.
  6095.  
  6096.       The  tosser  runs  and  a  message for "alt.cooking.chili" comes in.
  6097.       The forum will be created and the message added.  The tosser  writes
  6098.       a  line  to the file BBS:FNEW.LOG indicating that the forum has been
  6099.       created.  The new forum has the  read  privilege  P11.   This  means
  6100.       that  users  must  have  new  forum  review  (P11)  or  sysop  (P14)
  6101.       privilege to see  it.   It  is  important  to  note  that  the  name
  6102.       component   "chili"  has  the  new  read  privilege,  not  the  name
  6103.       component "alt" or "cooking".  These  components  do  not  have  any
  6104.       privileges associated with them.
  6105.  
  6106.       Chapter 9. Discussion Forums and Newsgroups                      103
  6107.  
  6108.  
  6109.       The  sysop reviews the BBS:FNEW.LOG file and sees a record about the
  6110.       new forum.  After review, the sysop decides to allow general  access
  6111.       to  the  forum.   Using  the  SYSOP control screen for the forum the
  6112.       read privilege is set to null  (no  expression  at  all  --  blank).
  6113.       Since  none  of  the  name  components  prior  to  "chili"  have any
  6114.       privileges, users will have default  access  to  this  forum.   They
  6115.       will  be  able  to read messages, post messages, and delete messages
  6116.       which they themselves have already posted.
  6117.  
  6118.       9.7.4 New Forum Management Using Privilege Inheritance
  6119.  
  6120.       The concept of privilege inheritance can  make  it  easier  for  the
  6121.       sysop   to   manage   a   large  number  of  forums  with  privilege
  6122.       restrictions.
  6123.  
  6124.       To demonstrate this, let us now assume that the  sysop  has  decided
  6125.       to  restrict  forum  access.  Only users with the sysop privilege 36
  6126.       (S36) are to be allowed any  access  to  forums.   The  sysop  still
  6127.       wishes to preview new forums, however.
  6128.  
  6129.       Assume  that  the first forum is created as in the previous example.
  6130.       The sysop now needs to set  the  read  privilege  to  S36  to  allow
  6131.       authorized  users  to  see  the new forum.  There are two ways to do
  6132.       this.  The sysop can change the privilege associated with  the  name
  6133.       component  "chili"  from  its  assigned value P11 to S36.  This will
  6134.       work as expected; only users with S36 will see the new forum.
  6135.  
  6136.       There is another way to accomplish the same thing  which  can  prove
  6137.       to  be  more  useful  when there are many forums.  If the sysop sets
  6138.       the read privilege of the name component "chili" to  null  and  sets
  6139.       the  read  privilege  of "alt" to S36 it will still be the case that
  6140.       only users  with  S36  will  be  able  to  read  "alt.cooking.chili"
  6141.       because  the component "chili" inherited its read privilege from the
  6142.       name component "alt".  How is this useful?  The next  time  a  forum
  6143.       is  created under "alt" the sysop need only reset the read privilege
  6144.       of the new forum to null and the new forum  will  inherit  its  read
  6145.       privilege  from  "alt".   When there are many forums under "alt" and
  6146.       the sysop decides to change the required privilege for  any  reason,
  6147.       there  will  only  be  one  place which will require the change: the
  6148.       "alt" name component.
  6149.  
  6150.       If the read privilege at "alt" is changed from  "S36"  to  "S36  AND
  6151.       S72"  then  all  of  the  forums  under "alt" will then require that
  6152.       privilege because of inheritance.  Had the sysop not done that  then
  6153.       every  single forum would have had to be modified from "S36" to "S36
  6154.       AND S72".
  6155.  
  6156.  
  6157.       9.8 The Forum Control Files and User Access Files
  6158.  
  6159.       There  are  several  control  files  used  with  forum  access   and
  6160.       maintenance.   The  SYSOP  program  and  TSX-BBS  use  these to gain
  6161.       access to forum  information.   It  is  not  strictly  necessary  to
  6162.       understand  the role of the various system control files in order to
  6163.  
  6164.       Chapter 9. Discussion Forums and Newsgroups                      104
  6165.  
  6166.  
  6167.       use or  manage  forums.   The  information  here  is  presented  for
  6168.       completeness.
  6169.  
  6170.       9.8.1 Forum Control and Data Files
  6171.  
  6172.       Each  forum  has  one  control file and one data file.  The names of
  6173.       the files are "Fn.CTL" and "Fn.DAT, where 'n' is the number  of  the
  6174.       forum.   For  instance, forum 1234 would have control and data files
  6175.       called F1234.CTL and F1234.DAT, respectively.
  6176.  
  6177.       The two control files  for  each  forum  are  located  in  the  same
  6178.       directory.   The  name  of the directory which contains the files is
  6179.       derived from the forum number.  The directory and  files  names  are
  6180.       automatically  created  when  the  forum is created.  Briefly, there
  6181.       are three levels of directory for every  forum  file.   The  topmost
  6182.       directory  is called "FDnnnn" where "nnnn" is the thousands value of
  6183.       the forum number.  The second level is named "FDnnn" where "nnn"  is
  6184.       the  hundreds  level  of the forum number.  The third level is named
  6185.       "FDnn" where "nn" is the  tens  level  of  the  forum  number.   For
  6186.       example,   forum   number   1234   would  be  located  in  directory
  6187.       "\FD1000\FD200\FD30\".
  6188.  
  6189.       Again, these directories are created automatically  when  the  forum
  6190.       is created.
  6191.  
  6192.       These  directories,  in  turn,  are themselves rooted in directories
  6193.       specified through the SYSOP program.   This  will  be  described  in
  6194.       Section 15.10.1 page 161.
  6195.  
  6196.       9.8.2 The BBS:FTREE.DAT File
  6197.  
  6198.       A  file named "BBS:FTREE.DAT" contains the forum information used by
  6199.       the SYSOP program.  This file is modified when  forums  are  created
  6200.       and  deleted  and  when  privileges  are  set.   This  file  can  be
  6201.       re-generated from the forum control files by using the SYSOP  option
  6202.       "Build  from  ctl  files".  The SYSOP program consults this file for
  6203.       its displays.
  6204.  
  6205.       9.8.3 The VFILEx.DAT files
  6206.  
  6207.       A   set   of   files   named   "BBS:VFILEC.DAT",   "BBS:VFILEH.DAT",
  6208.       "BBS:VFILEA.DAT",  and  "BBS:VFILEN.DAT"  contain  index information
  6209.       which allows users fast access to the forum  information.   The  are
  6210.       ASCII  files  which  are  generated  by the tossers and by the SYSOP
  6211.       program.  They contain a snapshot of what is in the  FTREE.DAT  file
  6212.       at  the  time  they were generated.  All four files are generated at
  6213.       the same time.  The SYSOP program can generate these files with  the
  6214.       command  "Make  user  access  files".  Tossers will regenerate these
  6215.       files at the end of their run if they created new forums.  When  the
  6216.       sysop  interactively  creates  or  deletes  forums the SYSOP program
  6217.       will notify the sysop that the files need regeneration.   The  sysop
  6218.       may elect to not regenerate at that time.
  6219.  
  6220.       These  files  should never be edited.  They contain internal offsets
  6221.       which would be easily disrupted by a change in the  file  size.   If
  6222.  
  6223.       Chapter 9. Discussion Forums and Newsgroups                      105
  6224.  
  6225.  
  6226.       changes  are  needed  the SYSOP program should be used to regenerate
  6227.       the files.  The files can be regenerated while users are logged on.
  6228.  
  6229.  
  6230.       9.9 Forum Log Files and the Forum Event Log
  6231.  
  6232.       Forum operations create and append to various log files  and  to  an
  6233.       event  log.   These  files  record  various  levels  of detail about
  6234.       aspects of forum operation.  All forum log files have names  of  the
  6235.       form "BBS:Fxxxx.LOG".  The forum event log is called FBATCH.
  6236.  
  6237.       The  SYSOP  program,  through  the "Log file Options" selection, can
  6238.       enable or disable generation any of these log files.   In  addition,
  6239.       these  log  files  can be deleted at any time should the need arise.
  6240.       They will be recreated when they are again needed.  The use  of  log
  6241.       files  is  not  required;  they  are  used  for  troubleshooting and
  6242.       general reporting.
  6243.  
  6244.       There is a program called LOGSWEEP which will trim the log files  so
  6245.       that  they only keep a specified number of days worth of data.  Once
  6246.       properly set up and enabled, the LOGSWEEP program will  ensure  that
  6247.       the  log files do not grow without bound and will allow log files to
  6248.       be used as a historical resource.
  6249.  
  6250.       There are 6 forum log files.  A section will describe each of  them.
  6251.       All  log  file  entries  are preceded by the date and the time.  The
  6252.       examples will leave the date and time out for brevity.
  6253.  
  6254.       9.9.1 FSUMMARY.LOG
  6255.  
  6256.       This log file  contains  a  brief  summary  of  tosser  and  sweeper
  6257.       operations.  Here is a sample of a tosser run:
  6258.  
  6259.            ***** TOSSER starting run
  6260.            Summary of messages added to grand division usenet
  6261.            Messages added = 11
  6262.            Bytes added = 10674
  6263.            Duplicates rejected = 0
  6264.            Messages were rejected due to name restrictions = 0
  6265.            Forums created = 10
  6266.            ***** TOSSER ended run
  6267.  
  6268.       Each line is described below:
  6269.  
  6270.       Summary  of  messages added to grand division usenet --- Each tosser
  6271.           adds to one of the grand divisions.  There is  a  usenet  tosser
  6272.           and  a  fidonet tosser.  As more tossers are developed they will
  6273.           add  to  different  grand  divisions.    Grand   divisions   are
  6274.           discussed in Section 9.5.
  6275.  
  6276.       Messages  added  =  11  ---  This  is the number of messages for all
  6277.           forums from all files.
  6278.  
  6279.       Bytes added = 10674 --- This is the uncompressed byte  size  of  the
  6280.           sum of the messages.
  6281.  
  6282.       Chapter 9. Discussion Forums and Newsgroups                      106
  6283.  
  6284.  
  6285.       Duplicates  rejected  = 0 --- Attempts to add duplicate messages are
  6286.           rejected.  This is the total for this run.
  6287.  
  6288.       Messages were rejected due to name restrictions =  0  ---  When  the
  6289.           tossers  find  a  message  to  a forum which does not exist they
  6290.           will try to create it.  Section  9.7.1  describes  the  way  the
  6291.           sysop  can  limit  forum creation on a name-by-name basis.  This
  6292.           represents the count of messages to forums which did  not  exist
  6293.           and which could not be created due to name restrictions.
  6294.  
  6295.       Forums  created  = 10 --- When the tossers find a message to a forum
  6296.           which does not exist they will try to create it.   This  is  the
  6297.           number of forums created by the tosser during this run.
  6298.  
  6299.       Here is a sample sweeper run:
  6300.  
  6301.            ***** SWEEPER run starting at  3-Sep-1994 13:05:36.970
  6302.            Duration 0 hours 0 minutes 3 seconds
  6303.            10 forum(s) processed
  6304.            2 forum(s) skipped
  6305.            Deleted a grand total of 10 message(s), 237 bytes
  6306.            ***** SWEEPER run ended at  3-Sep-1994 13:05:40.770
  6307.  
  6308.       10  forum(s)  processed  ---  The  sweeper  will,  by  default, only
  6309.           process forums which had messages tossed into  them.   Therefore
  6310.           the  number  of  forums processed may frequently be much smaller
  6311.           than the actual number of forums on the system.
  6312.  
  6313.       2 forum(s) skipped --- There are circumstances which will cause  the
  6314.           sweeper to skip a forum.
  6315.  
  6316.       Deleted  a grand total of 10 message(s), 237 bytes --- At the end of
  6317.           its run it reports a grand total of messages and bytes deleted.
  6318.  
  6319.       Tossing and sweeping are the two primary batch forum activities,  so
  6320.       the  summary  file  just  reports  the  major  statistics from those
  6321.       operations.
  6322.  
  6323.       9.9.2 FSWEEP.LOG
  6324.  
  6325.       When the sweeper runs it reports on every forum it processes.   This
  6326.       report contains detail on each forum.  Here is some sample output.
  6327.  
  6328.            ***** SWEEPER run starting at 10-Sep-1994  0:00:02.310
  6329.            Performing mini sweep
  6330.            Cluster optimization will be performed
  6331.            Number of days override = 4
  6332.            Number of messages override = 40
  6333.            Mininum number of messages override = 10
  6334.            Processing file f:\bbsforum\FD1000\FD000\FD00\F1000.CTL
  6335.            Forum name is usenet.comp.os.ms-windows.programmer.misc
  6336.            39011 bytes, 37 actual messages,
  6337.            0 marked deleted, 0 expired
  6338.            Earliest written 09/07/94 01:49.
  6339.            Earliest added 09/08/94 18:43
  6340.  
  6341.       Chapter 9. Discussion Forums and Newsgroups                      107
  6342.  
  6343.  
  6344.            Processing file f:\bbsforum\FD1000\FD000\FD00\F1007.CTL
  6345.            Forum name is usenet.misc.jobs.resumes
  6346.            153770 bytes, 42 actual messages
  6347.            0 marked deleted, 0 expired
  6348.            Earliest written 09/05/94 13:56.
  6349.            Earliest added 09/07/94 21:06
  6350.            Deleted 2 messages, 174 bytes
  6351.  
  6352.       The  sweeper  begins  by  reporting  the values appropriate for this
  6353.       execution.   There  are  many  options  to  control  the   sweeper's
  6354.       behavior.
  6355.  
  6356.       Performing  mini  sweep  ---  A  mini sweep will only process forums
  6357.           which had messages tossed into them or added to them.
  6358.  
  6359.       Cluster optimization will be  performed  ---  The  DOS  file  system
  6360.           stores  files  in  units called clusters.  The size of a cluster
  6361.           varies depending on the size of the disk.  Even if a  file  only
  6362.           has  one  byte  in  it it will occupy a cluster on the disk.  If
  6363.           the data files for a forum are less than a cluster  in  size  no
  6364.           disk  space  is recovered if messages are deleted from it.  This
  6365.           option, which is the default, tells the sweeper  to  bypass  any
  6366.           forum  whose  data  files are less than a cluster in size.  This
  6367.           reduces the time that the sweeper takes to run.
  6368.  
  6369.       Number of days override = 4 --- This tells  the  sweeper  to  expire
  6370.           messages which are older than 4 days old.
  6371.  
  6372.       Number  of  messages  override  =  40  --- This tells the sweeper to
  6373.           limit the number of messages in a forum to 40.
  6374.  
  6375.       Mininum number of messages override = 10 --- This tells the  sweeper
  6376.           to  always  at least keep 10 messages in the forum, even if they
  6377.           are expired.
  6378.  
  6379.       Each forum processed produces a set of messages.
  6380.  
  6381.         . Processing file f:\bbsforum\FD1000\FD000\FD00\F1000.CTL ---  The
  6382.           name of the control file is given to introduce the section.
  6383.  
  6384.         . Forum   name  is  usenet.comp.os.ms-windows.programmer.misc  The
  6385.           name of the forum is reported.
  6386.  
  6387.         . 39011 bytes, 37 actual messages --- This is the actual count  of
  6388.           messages and the size before sweeping.
  6389.  
  6390.         . 0  marked  deleted, 0 expired --- This is a count of deleted and
  6391.           expired messages.
  6392.  
  6393.         . Earliest written 09/07/94 01:49.  -- Newest message date.
  6394.  
  6395.         . Earliest added 09/08/94 18:43 --- It is sometimes useful to  see
  6396.           the oldest message written and posted to a forum.
  6397.  
  6398.       Chapter 9. Discussion Forums and Newsgroups                      108
  6399.  
  6400.  
  6401.       This  first  example did not exceed the restrictions specified so no
  6402.       messages  were  deleted.   In  the  second  example  messages   were
  6403.       deleted.   The  number  of  messages  and byte count are reported as
  6404.       follows.
  6405.  
  6406.            Deleted 2 messages, 174 bytes
  6407.  
  6408.       9.9.3 FREJECT.LOG
  6409.  
  6410.       When the tossers find a message for a forum  which  does  not  exist
  6411.       they  will try to create the forum.  Section 9.7.1 describes the way
  6412.       the sysop can limit forum creation on  a  name-by-name  basis.   The
  6413.       sysop can also globally disable new forum creation.
  6414.  
  6415.       When  forum  creation  is  globally  disabled  the following message
  6416.       appears in the log file
  6417.  
  6418.            Discarding message to forum usenet.alt.cars due to AUTOADD = 0
  6419.  
  6420.       When an attempt to create a forum fails due to  name  restriction  a
  6421.       message of the following form appears.
  6422.  
  6423.            Discarding message to usenet.alt.cars due to name restriction
  6424.  
  6425.       9.9.4 FSTAT.LOG
  6426.  
  6427.       This  log file contains statistics about tosser runs.  It contains a
  6428.       line about each file that it processes as well  as  a  copy  of  the
  6429.       same  statistics  that  go  to  the  summary file.  Here is a sample
  6430.       showing output from a usenet tosser run.
  6431.  
  6432.            Pre-Processing file DHA0:\TSX32\BBS\FORUM\BATCH\NEWS1490.BAG
  6433.            Pre-Processing file DHA0:\TSX32\BBS\FORUM\BATCH\NEWS1491.BAG
  6434.            Pre-Processing file DHA0:\TSX32\BBS\FORUM\BATCH\NEWS1492.BAG
  6435.            Pre-Processing file DHA0:\TSX32\BBS\FORUM\BATCH\NEWS1493.BAG
  6436.            Pre-Processing file DHA0:\TSX32\BBS\FORUM\BATCH\NEWS1494.BAG
  6437.            Summary of messages added to grand division usenet
  6438.            Messages added = 31
  6439.            Bytes added = 112922
  6440.            Duplicates rejected = 0
  6441.            Messages were rejected due to name restrictions = 0
  6442.            Forums created = 29
  6443.  
  6444.       9.9.5 FNEW.LOG
  6445.  
  6446.       When the tossers find a message to a  forum  which  does  not  exist
  6447.       they  will  try  to  create  it.   If  this  succeeds then a line is
  6448.       written to this file of the form:
  6449.  
  6450.            Created forum usenet.alt.cars.ford forum number 1378
  6451.  
  6452.       The sysop can review this list and decide on which forums  to  keep.
  6453.       Section  9.7.2  describes  how  to keep users from seeing new forums
  6454.       until the sysop has had a chance to review them.
  6455.  
  6456.       Chapter 9. Discussion Forums and Newsgroups                      109
  6457.  
  6458.  
  6459.       9.9.6 FERROR.LOG
  6460.  
  6461.       Errors during tosser runs are written to  this  file.   The  tossers
  6462.       report the following kinds of errors.
  6463.  
  6464.         . Duplicate message detection.
  6465.  
  6466.         . Messages with invalid byte counts.
  6467.  
  6468.         . Messages with records that are over 300 bytes long.
  6469.  
  6470.         . Errors in decoding headers, including:
  6471.  
  6472.             . Unknown source
  6473.  
  6474.             . Unknown subject
  6475.  
  6476.             . Unknown date
  6477.  
  6478.             . Unknown newsgroups
  6479.  
  6480.         . Any system related errors.  These have the form
  6481.  
  6482.                TSX error <dddddddd> <function>
  6483.  
  6484.           Where  <dddddddd>  is  an  error  code  and  <function>  is text
  6485.           related to  the  problem.   These  sorts  of  errors  should  be
  6486.           reported to technical support.
  6487.  
  6488.       9.9.7 The FBATCH event log
  6489.  
  6490.       The  tossers  and  the  sweeper write to an event log called FBATCH.
  6491.       This event log contains all  the  messages  directed  to  all  event
  6492.       logs.   Event  logs  does  not  occupy any disk space so there is no
  6493.       reason not to leave it on all the time.  This  can  be  viewed  from
  6494.       the  SYSOP  program  by  selecting the "Display Event Log" function.
  6495.       The event log  is  most  useful  as  a  means  of  watching  ongoing
  6496.       processing.   The  TSX  "SHOW  EVENTS"  command  can also be used to
  6497.       monitor event logs.
  6498.  
  6499.  
  6500.       9.10 Classified Ads
  6501.  
  6502.       In TSX-BBS, the functionality for classified ads is integrated  into
  6503.       forum   processing.    All   the   forum   functions  for  creating,
  6504.       maintaining, and deleting forums are used with  classifieds.   Users
  6505.       browse,  search,  post,  and reply to classifieds just as they would
  6506.       to a normal forum.
  6507.  
  6508.       Classifieds are created using a set  of  forums  under  a  specified
  6509.       grand  division.   If  the  grand division name is "classified", for
  6510.       instance, creating a forum called "classified.boats" will  create  a
  6511.       classified  forum  called  "boats".   Since  forums  can  be created
  6512.       hierarchically, the sysop can elect to have classifieds which  allow
  6513.       specification  of  more  detail in the name.  For example, you could
  6514.  
  6515.       Chapter 9. Discussion Forums and Newsgroups                      110
  6516.  
  6517.  
  6518.       create forums named "classified.cars.ford" and
  6519.       "classified.cars.toyota", etc.  This  system  allows  for  efficient
  6520.       management  of many thousands of ads by breaking down the areas into
  6521.       manageable sizes.
  6522.  
  6523.       There are some minor differences between classified  ads  and  other
  6524.       forums.   These  differences  were implemented to make it easier for
  6525.       the sysop to manage classifieds.
  6526.  
  6527.       9.10.1 User interface issues
  6528.  
  6529.       TSX-BBS users view and search for classified forums in the same  way
  6530.       as  regular forums.  By default, users will be able to post (add new
  6531.       messages) to the classified forums.  The  sysop  can  restrict  this
  6532.       capability  by  setting up write privileges for the classified grand
  6533.       division name.  In this way  the  sysop  could,  if  desired,  force
  6534.       users  to  mail  messages  to  the  sysop  first  for  approval  and
  6535.       subsequent  posting  by  the  sysop.   Privileges  and  forums   are
  6536.       discussed in Section 9.6.
  6537.  
  6538.       Replies  to  messages  in classified forums are not posted publicly;
  6539.       they are sent as private E-mail messages to the  person  who  posted
  6540.       the ad.
  6541.  
  6542.       When  users  post  messages  to classified forums the "TO:" field is
  6543.       always "ALL".
  6544.  
  6545.       9.10.2 Specification of Classified Ad Forums to the SYSOP Program
  6546.  
  6547.       From the sysop's perspective there is only one item which is  unique
  6548.       to  the  forums which are used as classifieds: the name of the grand
  6549.       division.  The grand division  name  is  spelled  out  so  that  the
  6550.       various  components  of  TSX-BBS  are  aware  of  forums  which  are
  6551.       classifieds.
  6552.  
  6553.       From the SYSOP program main  forum  menu  type  'H'  to  select  the
  6554.       "Housekeeping"  screen.   From there type 'G' to select the "General
  6555.       forum options" screen.   The  section  "Classified  Options"  allows
  6556.       specification of the grand division name.
  6557.  
  6558.       The  value  you  must  specify is the "Classified ads grand division
  6559.       name".  This string must be the grand division name for  any  forums
  6560.       created  as classifieds.  Specification of this name enables various
  6561.       aspects of TSX-BBS to be aware when they are  processing  classified
  6562.       forums.   You  can  choose whatever name you want for the classified
  6563.       grand division.  Typical names are "classified" and "ads".
  6564.  
  6565.       Once you have specified the classified ad grand  division  name  and
  6566.       the  number  of  days  before  expiring  messages,  you are ready to
  6567.       define the actual forum names.  Press ESC twice  to  return  to  the
  6568.       main  forum  menu.   From here press 'C' to select "Create" and then
  6569.       press 'C'  again  to  select  "Create  forum".   You  will  then  be
  6570.       presented  with  a  data entry screen titled "Create new forum".  In
  6571.       the first field, labeled "Name", enter the name of the forum.   This
  6572.       name  must begin with the grand division name that you specified for
  6573.  
  6574.       Chapter 9. Discussion Forums and Newsgroups                      111
  6575.  
  6576.  
  6577.       classified ads.  In other words, if you  specified  "classified"  as
  6578.       the  grand  division  name, you would give your forums names such as
  6579.       "classified.cars",  "classified.boats",  "classified.jobs.clerical",
  6580.       etc.   Repeat  the  forum  creation  process  for each classified ad
  6581.       forum.  See Section 15.10.3 on page 165 for  additional  information
  6582.       about creating forums.
  6583.  
  6584.       The  sweeper  program recognizes that a forum is part of classifieds
  6585.       and will ignore minimum and maximum messages  for  any  such  forum.
  6586.       In   other  words,  the  sweeper  will  only  delete  messages  from
  6587.       classifieds based on the  expiration  date  of  the  messages.   The
  6588.       section  9.3  describes  how the number of days to expiration can be
  6589.       specified on a forum by forum basis or associated with  a  class  of
  6590.       forums with a common name.
  6591.  
  6592.       As  an example of how to associate a single expiration date with all
  6593.       forums  under  classified,  assume   that   the   sysop   is   using
  6594.       "classified"  as  the  grand  division name and assume the sysop has
  6595.       created at least one forum under that name.  There  is  now  a  name
  6596.       component  called  "classified" which can be modified with the SYSOP
  6597.       program by going through the "Forum",  "Modify  and  Display  menu",
  6598.       "Hierarchical  List"  menus.   Selecting "Modify forum" will display
  6599.       the "Inspect forum" screen.  From here  the  number  of  days  until
  6600.       expiration can be specified, if desired.
  6601.  
  6602.  
  6603.  
  6604.  
  6605.  
  6606.  
  6607.                                    Chapter 10
  6608.  
  6609.                                 Electronic Mail
  6610.  
  6611.  
  6612.  
  6613.  
  6614.  
  6615.       10.1 Introduction
  6616.  
  6617.       This  chapter  covers  TSX-BBS  facilities for sending and receiving
  6618.       private electronic messages.  Note that the forum  system  also  has
  6619.       electronic  mail,  but  forums are public message areas divided into
  6620.       message  categories.   Electronic  mail  covers  messages  sent  and
  6621.       received for individual bulletin board subscribers.
  6622.  
  6623.       To  manage  the  TSX-BBS mail facility, you need to be familiar with
  6624.       the following terms.
  6625.  
  6626.         . Message bases are database files  with  messages  in  them.   To
  6627.           maximize  efficiency  and  ease  management,  TSX-BBS  organizes
  6628.           electronic mail into separate message bases.  The  main  message
  6629.           base  stores all incoming mail for the subscribers of the board.
  6630.           This includes mail which has been sent from  one  subscriber  to
  6631.           another,  as  well as mail which has been received from external
  6632.           mail services such as Fidonet or Internet.  A  separate  message
  6633.           base  contains  messages  which  users  have  read and saved for
  6634.           future reference.  Finally, there is one message base  for  each
  6635.           type  of  outgoing  mail  (for  example,  one  message  base for
  6636.           outgoing  Internet  mail  and  one  message  base  for  outgoing
  6637.           Fidonet mail).
  6638.  
  6639.         . Area  numbers  are  numeric codes assigned to each message base.
  6640.           Area numbers are also assigned to  forums.   Forums  and  e-mail
  6641.           areas  are  assigned  numeric  codes  for the benefit of offline
  6642.           readers like QWK, which need a shorthand way  to  refer  to  the
  6643.           areas  which  the  user  wants to process offline.  Area numbers
  6644.           are also used internally by  TSX-BBS  to  identify  mail  routes
  6645.           such as fidonet.
  6646.  
  6647.         . Routes  are  the  methods  of transmission of mail message.  The
  6648.           "local" route describes mail sent  directly  between  two  board
  6649.           subscribers.    Fidonet  and  Internet  mail  would  each  be  a
  6650.           separate route.   There  is  a  separate  message  base,  and  a
  6651.           separate area number, for each outgoing mail route.
  6652.  
  6653.         . The  "filing  cabinet" is the message base containing mail which
  6654.           users have saved for later.
  6655.  
  6656.  
  6657.  
  6658.  
  6659.                                       112
  6660.  
  6661.       Chapter 10. Electronic Mail                                      113
  6662.  
  6663.  
  6664.         . "Scanners"  are  programs  which  scan  message  bases,  collect
  6665.           outgoing  messages,  and post the messages in a form that mailer
  6666.           programs such as Front Door require.
  6667.  
  6668.         . "Tossers"  are  programs  which  read  incoming  messages   from
  6669.           external  mail  services  and  deliver  them  to  the  local BBS
  6670.           subscribers or post messages in discussion forums.
  6671.  
  6672.         . "Mailer" programs  communicate  with  corresponding  mailers  on
  6673.           other  computers and send and receive messages.  "Front Door" is
  6674.           an example of a mailer program.
  6675.  
  6676.         . The  "mail  sweeper"  is  a  program  which  periodically  scans
  6677.           through  message  bases,  compressing  them  by  eliminating old
  6678.           messages.
  6679.  
  6680.       Management of each of these mail related facilities is discussed  in
  6681.       the following sections.
  6682.  
  6683.  
  6684.       10.2 Message Bases and Routes
  6685.  
  6686.       Each  message  base  consists  of two separate files.  The larger of
  6687.       the two is the text file, which contains the text of  each  message.
  6688.       To  make  finding messages fast, a summary of each message is stored
  6689.       in a smaller file called the control file.  For  each  message  base
  6690.       there  will  be a text file with an extension of MLD (for mail data)
  6691.       and a control file with an extension  of  MLC  (for  mail  control).
  6692.       The  name  of  each  message  base is assigned by the sysop, but the
  6693.       system comes with default  names  for  local  mail  and  the  filing
  6694.       cabinet.   These  include INMAIL for local mail (hence there are two
  6695.       files named INMAIL.MLD and INMAIL.MLC) and MAILFILE for  the  filing
  6696.       cabinet.
  6697.  
  6698.       As  we  noted  above, there is a separate message base for each mail
  6699.       route.  Using the  SYSOP  program,  you  set  up  which  routes  are
  6700.       supported  by  your  board  and  assign message bases to each route.
  6701.       See Chapter 15, page 159 for a description of how to do this.
  6702.  
  6703.       The only management of message bases you need to do is to  set  them
  6704.       up  when implementing support for a new message route.  Suppose, for
  6705.       example, that you have just  become  a  Fidonet  node  and  need  to
  6706.       provide   access   to  Fidonet  mail  for  your  users.   Using  the
  6707.       electronic mail screen  of  SYSOP,  you  simply  add  Fidonet  as  a
  6708.       supported  route  by  providing  a  single letter designation (which
  6709.       denotes Fidonet in the mail  route  menu),  and  the  name  for  the
  6710.       associated  messagebase  (such  as FIDONET).  After you do this, all
  6711.       that is left is to schedule execution of the Fidonet  tosser,  which
  6712.       is explained below.
  6713.  
  6714.       When  you  create  a  new  message  base,  you  must  identify which
  6715.       supported message base this is by giving it the proper message  area
  6716.       number.   This  area number serves two purposes.  First, it provides
  6717.       offline readers like QWK a way to denote which areas the user  wants
  6718.       included  in offline processing.  Second, the area number is used by
  6719.  
  6720.       Chapter 10. Electronic Mail                                      114
  6721.  
  6722.  
  6723.       tossers and scanners to  query  the  system  for  the  name  of  the
  6724.       message  base  they  are supposed to be processing.  This means that
  6725.       the area numbers are not arbitrary numbers you can assign,  but  are
  6726.       assigned  for  each  message  route for which support is provided by
  6727.       S&H.  The area number designation for routes  such  as  Fidonet  and
  6728.       Internet is specified in the support kit for each route.
  6729.  
  6730.       If  you subsequently dropped support for Fidonet, you will return to
  6731.       the SYSOP mail screen  and  erase  the  information  about  Fidonet.
  6732.       This  would eliminate Fidonet from the mail route menu, but you must
  6733.       delete the message base files (FIDONET.MLD and FIDONET.MLC) by  hand
  6734.       when you are ready to do so.
  6735.  
  6736.  
  6737.       10.3 Scanners and Tossers
  6738.  
  6739.       For  each  external  (non local) mail route, there must be a way for
  6740.       messages to be sent out of your board, and a way for  incoming  mail
  6741.       message  to  be  delivered  to  your  subscribers.   Each route must
  6742.       therefore include a scanner program to  send  outgoing  mail  and  a
  6743.       tosser program to receive incoming mail.
  6744.  
  6745.       This  means  that when you install support for a new mail route, you
  6746.       must copy the tosser and scanner programs onto your  hard  disk  and
  6747.       take steps to ensure that they will be executed when needed.
  6748.  
  6749.       Normally  scanners  are  run  on  a  periodic basis, such as once or
  6750.       twice a day.  Each time it runs, the scanner will read  the  message
  6751.       base  to see if there is new outgoing mail to be sent.  Each scanner
  6752.       is written to take whatever actions  are  appropriate  to  send  the
  6753.       mail  (such as dial a phone number and upload messages to a provider
  6754.       service).  You will want to use  the  SYSOP  scheduling  screens  to
  6755.       activate  each  mail  scanner  at  the times of the day you want the
  6756.       mail to be sent.  The scheduling screen is described in Chapter  15,
  6757.       page 148.
  6758.  
  6759.       Some  tossers  may  be  invoked automatically, in which case they do
  6760.       not need to be scheduled.   For  example,  you  can  configure  some
  6761.       Fidonet  mailer  programs  such  as  Frontdoor to invoke the Fidonet
  6762.       tosser program each time new mail is received.  Other tossers,  such
  6763.       as  those  which  dial  a mail service and query it for new incoming
  6764.       mail, must be scheduled for execution just like  the  mail  scanners
  6765.       are scheduled.
  6766.  
  6767.       Specific  information  about  each tosser and scanner is included in
  6768.       the chapter which discusses that option.  For example,  use  of  the
  6769.       Fidonet tosser and scanner is documented in chapter 19.
  6770.  
  6771.  
  6772.       10.4 The Mail Sweeper
  6773.  
  6774.       Messages  continue  to  accumulate in message bases, which will grow
  6775.       in size, until the message sweeper runs to compact the message  base
  6776.       by  eliminating  old  and  unwanted mail.  The mail sweeper program,
  6777.       MSWEEPER.EXP, must be scheduled just like tossers and scanners,  for
  6778.  
  6779.       Chapter 10. Electronic Mail                                      115
  6780.  
  6781.  
  6782.       periodic  execution.   Since the mail sweeper must wait while people
  6783.       are accessing the mail files reading  messages,  you  will  probably
  6784.       want  to  schedule  its  execution for late at night when traffic on
  6785.       the board is at a minimum.
  6786.  
  6787.       The mail  sweeper  will  eliminate  unwanted  messages  for  several
  6788.       different   reasons.   First,  incoming  messages  which  have  been
  6789.       deleted by the user are cleaned up.
  6790.  
  6791.       For an outgoing message base, messages which have been sent  by  the
  6792.       mail scanner are erased in the periodic mail sweep.
  6793.  
  6794.       Finally,  you  may  specify an age limit for unprocessed mail.  This
  6795.       cleans up very old outgoing  mail  which  was  never  sent  (perhaps
  6796.       because  the  message  service  was unavailable for a long time), as
  6797.       well as incoming letters which it appears the recipient  will  never
  6798.       get around to opening.
  6799.  
  6800.       The  age  limit  for  messages is specified in the same SYSOP screen
  6801.       used for mail route management.
  6802.  
  6803.  
  6804.       10.5 Managing local mail
  6805.  
  6806.       Once the local mail system is set up, no ongoing  management  should
  6807.       be  needed  at  all.   In  fact,  TSX-BBS comes preconfigured with a
  6808.       local message base and a filing cabinet, appropriate default  values
  6809.       for  message  limits  for  each defined user class, and a reasonable
  6810.       schedule for the mail sweeper.
  6811.  
  6812.  
  6813.       10.6 Filing Cabinet
  6814.  
  6815.       The filing cabinet provides your users a place to store messages  on
  6816.       a  long  term  basis.  These may be messages that they have received
  6817.       and want to refer to later or messages which they periodically  send
  6818.       out.
  6819.  
  6820.       There  are  two ways that you can prevent the filing cabinet message
  6821.       base from growing too large.  First, each user has a  limit  on  the
  6822.       total  number  of  messages  he  is  allowed  to store in the filing
  6823.       cabinet.  This limit is normally a function of the user  class,  but
  6824.       can  be customized for each individual user.  This user attribute is
  6825.       specified by the "Message  limit"  field  in  the  user  information
  6826.       screen.   See  Chapter 15, page 142, for information about using the
  6827.       user information screen.
  6828.  
  6829.       The second  way  that  you  can  prevent  the  filing  cabinet  from
  6830.       consuming  your  hard  disk  is  to  place  a  separate age limit on
  6831.       messages stored in the filing  cabinet.   This  limit  is  different
  6832.       than  the  age  limit for incoming and outgoing messages because the
  6833.       filing cabinet is, by definition, a long term storage area for  mail
  6834.       so  you  may  want to place a much more liberal age limit (such as a
  6835.       year) on it.
  6836.  
  6837.       Chapter 10. Electronic Mail                                      116
  6838.  
  6839.  
  6840.       10.7 Accessing Mail from Menus
  6841.  
  6842.       The system comes preconfigured with an electronic  mail  menu  named
  6843.       MAIL.MNU.   If  you  examine  this text file, you will see that each
  6844.       mail function included in the menu has  an  associated  action  name
  6845.       which it invokes.
  6846.  
  6847.       If  you  customize  your menus and want to include mail functions in
  6848.       customized menus, you should use the same  menu  actions  which  are
  6849.       used by MAIL.MNU.  These actions are:
  6850.  
  6851.         . MAILSYSOP  sends  a message to the sysop.  The recipient of such
  6852.           messages is the person named in  the  "Sysop  1"  field  of  the
  6853.           general setup screen.  See page 140 for more information.
  6854.  
  6855.         . MAILRECV is used to scan incoming mail.
  6856.  
  6857.         . MAILSEND  is  used  to write a new message.  This action is used
  6858.           for sending via all the routes you support on your board.
  6859.  
  6860.         . MAILRECV is used to read incoming mail which has been  addressed
  6861.           to  the  user.   A  user  can  never  read the mail addressed to
  6862.           somebody else.
  6863.  
  6864.         . MAILSYN allows the user to designate synonymous names  by  which
  6865.           his mail can be accessed.
  6866.  
  6867.         . MAILABOOK  allows the user to manage a person address book, used
  6868.           to enter shorthand designations of his correspondents.  This  is
  6869.           especially  useful  for  sending  Internet messages, since their
  6870.           addresses can be long and difficult to type.
  6871.  
  6872.         . MAILFILE allows the user to browse the filing  cabinet  for  his
  6873.           stored messages.
  6874.  
  6875.         . MAILBROWSE  is  used  by the sysop to view all the messages in a
  6876.           message base, regardless of the sender or recipient.
  6877.  
  6878.  
  6879.  
  6880.  
  6881.  
  6882.  
  6883.                                    Chapter 11
  6884.  
  6885.                                Censoring Messages
  6886.  
  6887.  
  6888.  
  6889.  
  6890.       One of the  primary  purposes  of  electronic  bulletin  boards  and
  6891.       networks  is to promote communication between people.  However, some
  6892.       people object to messages containing profanity that can be found  in
  6893.       public  forums -- especially some of the Usenet forums.  This can be
  6894.       especially troublesome for public access bulletin boards that  allow
  6895.       minors to read forum messages.
  6896.  
  6897.       TSX-BBS  provides  two  mechanisms  for restricting access to forums
  6898.       and messages that may be objectionable:
  6899.  
  6900.       1.  Forums may  have  privilege  expressions  associated  with  them
  6901.           which  restrict which users can access them.  This allows you to
  6902.           set up adult forums  that  can  be  accessed  only  by  properly
  6903.           authorized  users.   Forum  privileges  are discussed in Section
  6904.           9.6 starting on page 99.
  6905.  
  6906.       2.  A "word censoring" facility is built into TSX-BBS.  If  enabled,
  6907.           this  facility  will  store '*' characters over specified words;
  6908.           or, you can leave the first character of the word and store  '*'
  6909.           over  the remaining characters.  This chapter discusses the word
  6910.           censoring facility.
  6911.  
  6912.  
  6913.       11.1 Word Censoring Facility
  6914.  
  6915.       Many users enjoy the unrestricted nature of the Internet and take  a
  6916.       libertarian  view  to  the  content  of  messages  posted  in Usenet
  6917.       conferences.  If you are one of those people,  you  are  welcome  to
  6918.       leave  the  TSX-BBS  word  censoring  facility  turned off.  In this
  6919.       case, TSX-BBS will present messages exactly as  they  are  received.
  6920.       However,  some  sysops  are concerned about displaying messages with
  6921.       profanities on public bulletin board systems frequented  by  minors.
  6922.       This  can  be  an especially sensitive issue for schools that assign
  6923.       students to read Usenet messages.  If you  wish  to  censor  certain
  6924.       words  TSX-BBS  has the facility to do it.  You can even enable word
  6925.       censoring for some users but disable it for others.
  6926.  
  6927.       11.1.1 CENSOR.DAT File
  6928.  
  6929.       When word censoring is enabled, TSX-BBS scans each message as it  is
  6930.       displayed  or downloaded.  It compares each word in the message with
  6931.       a  list  of  words  that  you  place  in  an  external  file   named
  6932.       BBS:CENSOR.DAT.   If  TSX-BBS finds a word in the message that is in
  6933.  
  6934.  
  6935.                                       117
  6936.  
  6937.       Chapter 11. Censoring Messages                                   118
  6938.  
  6939.  
  6940.       your censor list, the word is replaced by '*' characters.  For  each
  6941.       word  in  your list, you can specify if all of the characters of the
  6942.       word in the the message are to be  replaced  by  '*'  characters  or
  6943.       whether  the  first  letter  of the word is to be left alone and the
  6944.       following letters replaced by '*'.
  6945.  
  6946.       When the matching is performed, TSX-BBS compares the first  part  of
  6947.       each  word  in  the message with each word in the censor list.  If a
  6948.       word in the list matches the beginning portion  of  a  word  in  the
  6949.       message,  the '*' replacement is performed on the part that matches.
  6950.       In other words, a suffix on the end of the word  does  not  have  to
  6951.       match  the  word  in  the  censor  list.   Depending  on options you
  6952.       specify, either all of the word that  matches  is  replaced  by  '*'
  6953.       characters or all but the first letter is replaced.
  6954.  
  6955.       For  example,  if  "kill"  is a word to be censored, then when it is
  6956.       found in the message it will be replaced by "k***"  or  "****".   If
  6957.       the  word  "killing"  is encountered, it is replaced by "k***ing" or
  6958.       "****ing".  The way the comparison  is  performed,  a  word  in  the
  6959.       censor  list  would  not be found if it is embedded in another word.
  6960.       For example, the censor word  "kill"  would  not  be  found  in  the
  6961.       message   word   "overkill".   However,  it  would  be  found  in  a
  6962.       hyphenated word such as "over-kill".
  6963.  
  6964.       In some cases it is desirable to require an exact  match  between  a
  6965.       censor  word  and  a  word  in  a  message  without  allowing suffix
  6966.       variations.  For example,  if  the  word  "ass"  is  a  word  to  be
  6967.       censored  and exact matching is not required, then the word "assume"
  6968.       would be replaced by "a**ume".  If you specify  exact  matching  for
  6969.       "ass"  then  "assume" would be left unchanged.  If you specify exact
  6970.       matching, you may need to put in plural forms of the  word  in  your
  6971.       censor list.
  6972.  
  6973.       If  you  wish  to  use  word  censoring, the first step is to use an
  6974.       ascii editor and create a file  named  "CENSOR.DAT"  in  the  "BBS:"
  6975.       directory  (by default this is C:\TSXBBS\DATA\).  This file contains
  6976.       the list of words  that  you  wish  to  censor.   You  must  specify
  6977.       exactly  one  word per line in the file.  In addition to the word to
  6978.       be censored, you may specify one or more of  the  following  options
  6979.       on the same line following the word:
  6980.  
  6981.       EXACT  --  Specifies  that  the  a word in the document must exactly
  6982.           match  a  word  in  the  censor  list  without  allowing  suffix
  6983.           variations.
  6984.  
  6985.       ALL  --  Specifies  that all characters of a matching word are to be
  6986.           replaced by '*' characters.  If this option  is  not  specified,
  6987.           the  first  character  of  the  word  is  left unchanged and the
  6988.           remaining characters are replaced by '*' characters.
  6989.  
  6990.       The following is an example of a CENSOR.DAT file:
  6991.  
  6992.            democrat
  6993.            ass exact
  6994.            kill all
  6995.  
  6996.       Chapter 11. Censoring Messages                                   119
  6997.  
  6998.  
  6999.       11.1.2 Censor Control Privilege
  7000.  
  7001.       In some situations it is desirable to allow some BBS users  to  read
  7002.       uncensored  messages  and others to have messages censored.  TSX-BBS
  7003.       allows this by providing a privilege called  "See  uncensored  text"
  7004.       (P18).   If  a  user is given this privilege, the user is allowed to
  7005.       read uncensored messages.  If a user does not have  this  privilege,
  7006.       and  a  BBS:CENSOR.DAT  file  exists, the user will receive censored
  7007.       messages.
  7008.  
  7009.       Note: word censoring only affects messages as they are displayed  or
  7010.       downloaded.    Censoring   is   not  applied  to  outgoing  messages
  7011.       generated by BBS users.
  7012.  
  7013.       Enabling word censoring increases the time to collect  messages  for
  7014.       QWK  downloads by about 3%.  Of course, it has no effect on the time
  7015.       taken to compress the QWK packet or download it.
  7016.  
  7017.  
  7018.  
  7019.  
  7020.  
  7021.  
  7022.                                    Chapter 12
  7023.  
  7024.                                 Internet Access
  7025.  
  7026.  
  7027.  
  7028.  
  7029.       With the optional "Internet Connection Package"  for  TSX-BBS,  your
  7030.       users  can  have  on-line,  real-time  connections to Internet sites
  7031.       around the world.  The Internet Connection option is  not  available
  7032.       for the demonstration, shareware version of TSX-BBS.
  7033.  
  7034.       The  TSX-BBS  Internet  Connection  option  provides  the  following
  7035.       components:
  7036.  
  7037.       FTP (File Transfer Program) -- Allows you to send and receive  files
  7038.           through  the  Internet.   With FTP you can do directory listings
  7039.           on remote computers, move up  and  down  through  the  directory
  7040.           tree, and transfer files to and from the TSX-BBS system.
  7041.  
  7042.       Telnet  --  Telnet is a terminal emulator program that allows you to
  7043.           log onto remote computers through the  Internet.   With  Telnet,
  7044.           you can run programs on computers around the world.
  7045.  
  7046.       SMTP  (Simple  Mail  Transport  Protocol)  -- Allows you to send and
  7047.           receive electronic mail  messages  through  the  Internet.   The
  7048.           SMTP  client  and server program are used, respectively, to send
  7049.           and receive email messages directly to and from other  computers
  7050.           connected  to  the Internet.  These programs work in conjunction
  7051.           with the SMTP scanner and tosser programs so that Internet  mail
  7052.           is fully integrated with the BBS.
  7053.  
  7054.       Incoming  SLIP  connections  --  This allows your users to call your
  7055.           BBS, log on, and then shift from an ASCII type connection  to  a
  7056.           SLIP   (Serial  Line  Interconnect  Protocol).   They  are  then
  7057.           connected to the Internet  through  your  BBS.   You  can  limit
  7058.           which  users  are  authorized  for SLIP connections.  The normal
  7059.           BBS usage limits also apply to SLIP connections.
  7060.  
  7061.       A menu file named  "INTERNET.MNU"  is  included  with  your  TSX-BBS
  7062.       distribution  which  contains  entries  to start FTP and Telnet, and
  7063.       enter SLIP mode.  It also includes an entry  to  manage  the  user's
  7064.       personal file workspace.
  7065.  
  7066.  
  7067.  
  7068.  
  7069.  
  7070.  
  7071.  
  7072.  
  7073.  
  7074.                                       120
  7075.  
  7076.       Chapter 12. Internet Access                                      121
  7077.  
  7078.  
  7079.       12.1 FTP -- File Transfer Program
  7080.  
  7081.       FTP  is  the  program  used  to  transfer files between your TSX-BBS
  7082.       system and a remote Internet site.  Using FTP you  can  perform  the
  7083.       following operations:
  7084.  
  7085.         . Connect to another site.
  7086.  
  7087.         . Change between directories on the remote computer.
  7088.  
  7089.         . List files in directories on the remote computer.
  7090.  
  7091.         . Transfer   files  from  your  TSX-BBS  computer  to  the  remote
  7092.           computer.
  7093.  
  7094.         . Transfer a  file  from  the  remote  computer  to  your  TSX-BBS
  7095.           system.
  7096.  
  7097.       Since  FTP  always  transfers  files  between  the  Internet  and  a
  7098.       directory on your BBS computer, it is necessary for a user  to  have
  7099.       a  "Personal File Workspace" in order to use FTP.  To receive a file
  7100.       through Internet, FTP is used to accept the file  and  store  it  in
  7101.       the   user's   personal  file  workspace.   The  file  can  then  be
  7102.       downloaded from the workspace to the user's personal computer  using
  7103.       X/Y/Z-modem.    Similarly,  to  send  a  file,  a  user  first  uses
  7104.       X/Y/Z-modem to upload the file to the personal  file  workspace  and
  7105.       then  uses  FTP  to  transfer  the  file  through the Internet.  See
  7106.       Chapter 8, starting on page 85, for information about personal  file
  7107.       workspaces.
  7108.  
  7109.       A  user  must  have  built-in  privilege P16 enabled in order to use
  7110.       FTP.  The menu action code to start FTP is "ftp".  The form  of  the
  7111.       action code is:
  7112.  
  7113.       action=ftp(menu_type[,drop_file])
  7114.  
  7115.       where  'menu_type'  is  a  numeric  parameter  that  determines  the
  7116.       default type of menu that FTP presents to the user.   The  following
  7117.       three values may be specified:
  7118.  
  7119.       0  --  Traditional  FTP command mode.  In this mode FTP displays the
  7120.           prompt "FTP>" and accepts commands terminated by  Enter.   Refer
  7121.           to   an  Internet  reference  book  for  information  about  FTP
  7122.           commands.  You can type "HELP" or "HELP command" to get help  on
  7123.           FTP commands.
  7124.  
  7125.       1  --  Hot  key menu mode.  A menu is displayed with the most common
  7126.           commands (get file, put file,  quit,  etc.)  and  the  user  can
  7127.           select  a  menu  item by pressing the single "hot key" character
  7128.           of the command.
  7129.  
  7130.       2 -- Menu line mode.   A  menu  is  displayed  with  a  set  of  FTP
  7131.           commands  and  the  user  selects a command by typing the letter
  7132.           for the command and then Enter.
  7133.  
  7134.       Chapter 12. Internet Access                                      122
  7135.  
  7136.  
  7137.       The 'drop_file' argument is optional and usually is  not  specified.
  7138.       If  you  do  not  specify a drop file name, TSX-BBS prompts the user
  7139.       for the name of the host computer to which he wants to connect,  and
  7140.       a  user  name  and  password  that  is  used  to log onto the remote
  7141.       computer.  TSX-BBS then builds a  "drop"  file  containing  commands
  7142.       with  the  information  the  user  enters  and  starts FTP in such a
  7143.       fashion that it initially executes the commands in the drop file.
  7144.  
  7145.       You can also make your own custom drop file.  In this case you  must
  7146.       specify  the  device,  directory,  and  name of the drop file as the
  7147.       "drop_file" argument to the ftp action.   If  you  create  your  own
  7148.       drop  file  then  the first argument to the ftp action, "menu_type",
  7149.       is ignored.  You may specify 0 for it.  The following  commands  may
  7150.       be placed in the FTP drop file:
  7151.  
  7152.       HOST  name  --  Specify  the  name  of  the  computer  to  which the
  7153.           connection is to be made.  The "name" argument can be either  an
  7154.           alphanumeric  name  such  as "sandh.com" or a numeric IP address
  7155.           in "dotted" notation such as "199.1.88.37".
  7156.  
  7157.       USERNAME string -- Specify the user name to use for the  logon.   If
  7158.           this  command  is  omitted,  the remote computer will prompt the
  7159.           user to log on.
  7160.  
  7161.       PASSWORD string -- Specify  the  password  to  use  for  the  remote
  7162.           logon.   If  this  command  is omitted, the remote computer will
  7163.           prompt the user for a password.
  7164.  
  7165.       SIZE value -- Specifies the maximum number of  bytes  of  data  that
  7166.           the  user  can  fetch  from  the  remote  computer  to the local
  7167.           computer.  If this command is omitted, or  the  value  is  zero,
  7168.           there  is  no  limit  placed  on the number of bytes that can be
  7169.           transferred.  This command does not limit the  number  of  bytes
  7170.           that  can  be  sent  from  the  TSX-BBS  system  to  the  remote
  7171.           computer.
  7172.  
  7173.       TIME value -- Specifies the maximum length of  time  that  the  user
  7174.           may  remain  connected  to  the  remote  computer.   The 'value'
  7175.           parameter is in units of seconds.
  7176.  
  7177.       MENUACT -- Specifies that FTP is to run in menu mode  with  hot  key
  7178.           activation.
  7179.  
  7180.       MENUCMD  --  Specifies that FTP is to run in menu mode and that menu
  7181.           actions  are  to  be  selected  by  typing  the  command  letter
  7182.           followed  by Enter.  If neither the MENUACT nor MENUCMD commands
  7183.           are specified, FTP starts out in traditional command mode.
  7184.  
  7185.       COMMANDS --  Specifies  the  start  of  a  block  of  FTP  commands.
  7186.           Following  the  "COMMANDS"  command  you  may  place  any of the
  7187.           traditional FTP commands.  The  command  section  is  terminated
  7188.           when  the  end  of  file  is  reached  or  a line is encountered
  7189.           consisting of four dollar signs ("$$$$").
  7190.  
  7191.       Chapter 12. Internet Access                                      123
  7192.  
  7193.  
  7194.       Comments -- Comment lines may be  placed  in  the  command  file  by
  7195.           beginning each comment line with an exclamation point.
  7196.  
  7197.       The following is an example of a complete FTP drop file:
  7198.  
  7199.            HOST SANDH.COM
  7200.            USERNAME ANONYMOUS
  7201.            PASSWORD JONES
  7202.            MENUACT
  7203.            COMMANDS
  7204.            ls
  7205.            $$$$
  7206.  
  7207.       If  these  commands  were  in a file named "C:\BBS\FTP.CMD" then the
  7208.       following command could be placed in a menu file to cause FTP to  be
  7209.       started with these commands when the letter 'F' is typed:
  7210.  
  7211.            $item key=F action=ftp(0,c:\bbs\ftp.cmd)
  7212.  
  7213.  
  7214.       12.2 Telnet -- Internet Terminal Session
  7215.  
  7216.       Telnet  is  a  terminal  emulator  program  for the Internet.  Using
  7217.       Telnet you can log onto computers accessible  through  the  Internet
  7218.       and run programs remotely.
  7219.  
  7220.       The  menu  action code to start Telnet is "telnet".  The form of the
  7221.       action code is:
  7222.  
  7223.       action=telnet[(host_name)]
  7224.  
  7225.       where host_name is an optional argument that specifies the  name  of
  7226.       the  host  computer  to  which the Telnet session is to connect.  If
  7227.       you do not specify a host_name argument, TSX-BBS  prompts  the  user
  7228.       to enter a host name.
  7229.  
  7230.       For  example,  the  following  command  in  a  menu file would start
  7231.       Telnet when the letter 'T' is typed and cause TSX-BBS to prompt  the
  7232.       user for the name of the host to connect to:
  7233.  
  7234.            $item key=T action=telnet
  7235.  
  7236.  
  7237.       12.3 Internet Mail (SMTP)
  7238.  
  7239.       12.3.1 Introduction
  7240.  
  7241.       The  Internet  Connection  Package includes the SMTP client program,
  7242.       SMTPC.EXP, which sends outgoing Internet mail, and the  SMTP  server
  7243.       program, SMTPS.EXP, which receives incoming Internet mail.
  7244.  
  7245.       The  relationship between these programs and TSX-BBS is identical to
  7246.       the way a mailer  program  such  as  Frontdoor  sends  and  receives
  7247.       Fidonet mail.
  7248.  
  7249.       Chapter 12. Internet Access                                      124
  7250.  
  7251.  
  7252.       For  outgoing  mail,  the  sysop  sets  up a message base which will
  7253.       store messages waiting to be transmitted.  Setting up message  bases
  7254.       is discussed in section 15.9.
  7255.  
  7256.       For  incoming mail, the tosser program is periodically run to gather
  7257.       the messages and write them  into  the  local  message  base.   This
  7258.       allows  a  TSX-BBS  user  to  receive messages from around the world
  7259.       just as easy as receiving messages from other  users  of  the  local
  7260.       board.
  7261.  
  7262.       12.3.2 Setting up Internet Mail
  7263.  
  7264.       The  following list describes each step you should take to implement
  7265.       Internet mail for your BBS.
  7266.  
  7267.         . Get on the Internet.  This probably means that you will need  to
  7268.           contact an Internet provider and subscribe to a service.
  7269.  
  7270.         . Set  up  the  message  base for outgoing Internet mail (see page
  7271.           159 for instructions).  You must use the message area  number  2
  7272.           for  your  Internet  message  base  because  this is the way the
  7273.           scanner program for outgoing Internet  mail  locates  it.   Once
  7274.           you  have  completed this step, your users will see the Internet
  7275.           option on the route selection menu for outgoing mail messages.
  7276.  
  7277.         . Go into the Internet configuration screen in SYSOP.  This  is  a
  7278.           submenu  of  the mail configuration screen, so type `M' from the
  7279.           top level menu for "Mail", then  `I'  from  the  mail  menu  for
  7280.           "Internet".   Enter  the  name  of  your  Internet node (such as
  7281.           MYNODE.EDU or MYNODE.COM) in the  domain  name  field.   Specify
  7282.           the  name  of the person to receive undeliverable incoming mail,
  7283.           if any.  Save your selections by pressing ESC.
  7284.  
  7285.         . Use the scheduling screen  in  SYSOP  to  schedule  the  scanner
  7286.           program   to  scan  outgoing  Internet  messages.   Use  of  the
  7287.           schedule manager is described in Chapter 20.
  7288.  
  7289.         . Ask the  schedule  manager  to  periodically  run  the  Internet
  7290.           tosser  procedure  to  toss  incoming Internet messages into the
  7291.           local message base.
  7292.  
  7293.       12.3.3 The Internet Scanner
  7294.  
  7295.       Outgoing  Internet  mail  is  scanned  by  the   SMTPSCAN   program,
  7296.       SMTPSCAN.EXP.   Normally  there  is  no need to qualify the SMTPSCAN
  7297.       invocation or include any other commands when it runs, so the  event
  7298.       which is specified to the schedule manager is simply SMTPSCAN.EXP.
  7299.  
  7300.       Each  time  the  scanner  runs  it  searches  the  outgoing Internet
  7301.       message base you set up for messages which are waiting to  be  sent.
  7302.       Each  such  message is extracted and formatted into a temporary file
  7303.       in the SMTPOUT subdirectory  of  your  BBS  area.   These  temporary
  7304.       files  are  given sequentially numbered names and have the extension
  7305.       of SOU.
  7306.  
  7307.       Chapter 12. Internet Access                                      125
  7308.  
  7309.  
  7310.       For each file generated, the scanner program will invoke  the  SMTPC
  7311.       client  to  perform  the  actual  work  of sending the message.  The
  7312.       operation of the SMTPC and SMTPS  client  and  server  programs  are
  7313.       described fully in the TSX Networking manual.
  7314.  
  7315.       When  the  SMTP  client  program  runs,  it  will  create a log file
  7316.       documenting the  transactions  which  take  place  with  the  server
  7317.       program  on  the  remote  computer  which receives the message.  The
  7318.       name of this file  matches  the  temporary  file  which  stores  the
  7319.       message text, and has the extension of LOG.
  7320.  
  7321.       When  the  SMTP client program exits, it exits with a status code of
  7322.       0 to indicate that the message was successfully sent,  or  non  zero
  7323.       if the message was not successfully sent.
  7324.  
  7325.       If  the message can not be delivered, the SMTPSCAN program will read
  7326.       this log file and send it back to the inbox of  the  user  who  sent
  7327.       the  message  so  that  the user can analyze why the message was not
  7328.       sent, take corrective action, and resend  it.   Examples  of  why  a
  7329.       message  might  not  be delivered include that the host name was not
  7330.       recognized or that the recipient was  not  recognized  by  the  SMTP
  7331.       server program on the host.
  7332.  
  7333.       The  SMTP  scanner program can be manually invoked by the sysop with
  7334.       command line qualifiers as follows:
  7335.  
  7336.            SMTPSCAN [/RESEND] [/FLUSH]
  7337.  
  7338.       The /RESEND qualifier is used  to  resend  all  messages  which  are
  7339.       currently  in  the outgoing SMTP message base.  The /FLUSH qualifier
  7340.       does not actually send any mail,  but  declares  that  all  messages
  7341.       currently in the message base have now been sent.
  7342.  
  7343.       12.3.4 The Internet Tosser
  7344.  
  7345.       Incoming  Internet messages are received by the SMTP server program,
  7346.       SMTPS, and placed in the SMTPIN subdirectory of your BBS  directory.
  7347.       You  should  ask  the  schedule  manager  to  periodically  run  the
  7348.       SMTPTOSS  program,  which  reads  the  temp  files  containing  each
  7349.       message  and  delivers  them  to the recipients by writing them into
  7350.       the local message base.
  7351.  
  7352.       Normally there are no other commands needed to run SMTPTOSS  and  no
  7353.       qualifiers  required for the SMTPTOSS command, so the event which is
  7354.       declared to the schedule manager is simply  SMTPTOSS.EXP  (there  is
  7355.       no batch file with commands to run the tosser program).
  7356.  
  7357.       However,  the  SYSOP  may  run  the SMTPTOSS program manually at any
  7358.       time using the following command syntax:
  7359.  
  7360.            SMTPTOSS [/DIRECTORY=dirname] [/SAVE]
  7361.  
  7362.       Normally the SMTPTOSS program will  look  for  the  temporary  files
  7363.       with   the  extension  of  SIN  which  the  SMTP  server  leaves  in
  7364.  
  7365.       Chapter 12. Internet Access                                      126
  7366.  
  7367.  
  7368.       BBS:\SMTPIN\.  You may specify an alternate directory to search  for
  7369.       *.SIN by specifying its name using the /DIRECTORY=name qualifier.
  7370.  
  7371.       Normally  the  SMTPTOSS  program deletes the temporary files once it
  7372.       has delivered them to the local message  base.   You  can  ask  that
  7373.       SMTPTOSS save these files by specifying /SAVE on the command line.
  7374.  
  7375.  
  7376.  
  7377.  
  7378.  
  7379.  
  7380.                                    Chapter 13
  7381.  
  7382.                                       Chat
  7383.  
  7384.  
  7385.  
  7386.  
  7387.       Chat  is  an  online  conferencing  feature  which allows concurrent
  7388.       users of your board to carry on  group  discussions.   This  chapter
  7389.       explains how chat works.
  7390.  
  7391.  
  7392.       13.1 Discussion Groups
  7393.  
  7394.       The  TSX-BBS  chat  facility  is  oriented toward discussion groups.
  7395.       You can think of chat as a room  full  of  people  talking  to  each
  7396.       other.   The  people  are  clustered  into  groups,  with each group
  7397.       engaged in discussing  a  different  topic.   When  a  person  in  a
  7398.       particular  group  make  a  statement, all the other members of that
  7399.       group listen, but people who are engaged  in  different  discussions
  7400.       do not pay any attention.
  7401.  
  7402.       Before  your  users  can  chat,  they  must  first  join an existing
  7403.       discussion group or create a new one.  Since most people  feel  more
  7404.       comfortable  joining  an ongoing conversation that striking up a new
  7405.       one, the sysop can create any number of permanent discussion  groups
  7406.       for  people  to  enter.   When two or more people are in a group, an
  7407.       online conversation can take place.
  7408.  
  7409.       You will probably want to create one or  two  general  groups  which
  7410.       most  people  will  join.   You  might  want to give them names like
  7411.       "chat lounge" or "general discussion".  If your board  has  a  large
  7412.       number  of  users, you may also want to create specialty groups like
  7413.       "politics" or "music".
  7414.  
  7415.       Creating  permanent  discussion  groups  is  done  using  the  SYSOP
  7416.       program.    The   data  entry  screen  used  to  create  and  delete
  7417.       discussion groups is described in section 15.5, page 153.
  7418.  
  7419.  
  7420.       13.2 Chat handles
  7421.  
  7422.       Users with sufficient  privilege  may  declare  "user  handles"  for
  7423.       themselves.   This  privilege is built-in privilege number 10 (P10),
  7424.       and is displayed by the SYSOP program as "use handles".
  7425.  
  7426.       The sysop may control whether handles are allowed to be used at  all
  7427.       and  under  what  circumstances they may be used.  Handle control is
  7428.       set up using the SYSOP program as described in Section 15.7.
  7429.  
  7430.  
  7431.  
  7432.                                       127
  7433.  
  7434.       Chapter 13. Chat                                                 128
  7435.  
  7436.  
  7437.       Users themselves can have two different ways they can set their  own
  7438.       handle.   First,  the  user  configuration  menu  includes an option
  7439.       named "handle name".  Second, the chat menu itself includes an  item
  7440.       named   "chat   handle",   which   invokes  the  menu  option  named
  7441.       "chathandle".
  7442.  
  7443.       Both of these options in fact set the same handle.  Users  with  P10
  7444.       privilege  may  declare this handle, which then shows while they are
  7445.       in chat, and is also displayed when other users see who  is  on  the
  7446.       board.
  7447.  
  7448.       Note  that  these  options  will not appear on the menus if the user
  7449.       does not have the privilege to use handles.
  7450.  
  7451.       The handle selected by the user is displayed by  the  SYSOP  program
  7452.       in  the  userlog  screen.  The sysop may change the handle from this
  7453.       screen.
  7454.  
  7455.  
  7456.       13.3 Scrolling
  7457.  
  7458.       The TSX-BBS chat system features split screen  chat,  but  only  for
  7459.       those  users  whose  communication  software  is  capable of partial
  7460.       screen scrolling.
  7461.  
  7462.       Partial screen  scrolling  means  that  the  BBS  sends  out  escape
  7463.       sequences  which cause a range of lines on the screen to be scrolled
  7464.       up while leaving the portions  of  the  screen  outside  that  range
  7465.       unaffected.
  7466.  
  7467.       If  users  can  support scrolling, chat uses the upper two thirds of
  7468.       the screen to show messages from members of  the  discussion  group,
  7469.       and  the  bottom  portion  of the screen for the user to compose his
  7470.       own input.
  7471.  
  7472.       If a  user  has  specified  that  he  can  not  accept  ANSI  escape
  7473.       sequences,  TSX-BBS  never  attempts  to  use  scrolling regions for
  7474.       chat,  since  the  sequences  to  perform  scrolling  are  an   ANSI
  7475.       extension.
  7476.  
  7477.       If  the user does accept ANSI sequence, TSX-BBS will ask the user to
  7478.       conduct a scrolling test the very first time that the user  accesses
  7479.       the  chat  system.   This  test will display marker lines at the top
  7480.       and bottom of a scrolling region, then  attempt  to  cause  multiple
  7481.       lines  to  scroll within the marked region.  The user must then tell
  7482.       TSX-BBS  whether  the  display  lines  scrolled  within  the  marked
  7483.       region.   After  this  test  has  been  conducted once, TSX-BBS will
  7484.       remember the setting.  This setting also appears  in  the  user  log
  7485.       screen, and can thus be set by the sysop at any time.
  7486.  
  7487.       Chapter 13. Chat                                                 129
  7488.  
  7489.  
  7490.       13.4 The chat user interface
  7491.  
  7492.       There  are separate menu actions for setting the handle, finding out
  7493.       who else is in chat,  joining  an  existing  discussion  group,  and
  7494.       creating  a  new discussion group.  As TSX-BBS is shipped, all these
  7495.       options are offered from the chat menu named CHAT.MNU.
  7496.  
  7497.       One of the minor modifications you may want  to  make  to  the  chat
  7498.       menu  is  to  remove  the option to create new discussion groups, or
  7499.       require some privilege to create new  discussion  groups.   You  are
  7500.       also  welcome  to  change  the  menu  structure  entirely  and place
  7501.       options  to  activate  the  various  chat  actions  throughout  your
  7502.       revised menu structure.
  7503.  
  7504.       13.4.1 Changing handle
  7505.  
  7506.       When  a  user  asks to change his chat handle, he is simply prompted
  7507.       with the current handle and allowed to enter a new one.   Note  that
  7508.       the  new  handle  must  be  "registered" with TSX-BBS, which ensures
  7509.       that no two users of any board are allowed the same user handle.
  7510.  
  7511.       13.4.2 User list
  7512.  
  7513.       When a user asks to see who else (if anybody)  is  in  chat,  he  is
  7514.       presented with a screen that looks like this:
  7515.  
  7516.            Users currently in chat
  7517.  
  7518.            [ 1] Cappannari
  7519.            [ 2] Red Baron in group Healthy Eating
  7520.            [ 3] Red Neck in group Racetrack
  7521.  
  7522.            [N]ext [P]rev [Q]uit:
  7523.  
  7524.       In  the  event  that  more  than one page of users is displayed, the
  7525.       user uses the next and previous keys to view  each  page,  and  then
  7526.       selects quit to return to the chat menu.
  7527.  
  7528.       Note  that there is also an option to view the users while currently
  7529.       in a discussion group, as described below.
  7530.  
  7531.       13.4.3 Creating a discussion group
  7532.  
  7533.       If a user asks to create a discussion group,  he  is  prompted  with
  7534.       the  name  of the new group.  After doing this, the user immediately
  7535.       "joins" the new group, where he must wait for a second user  to  see
  7536.       the group and join.
  7537.  
  7538.       Note  that  when  the  last participant finally leaves a group which
  7539.       has been created by a user, the  discussion  group  will  disappear.
  7540.       Only the sysop is allowed to create permanent discussion groups.
  7541.  
  7542.       Chapter 13. Chat                                                 130
  7543.  
  7544.  
  7545.       13.4.4 Joining an existing group
  7546.  
  7547.       If  the  user  asks  to  join  a discussion group, he is placed in a
  7548.       browse screen similar to the one shown below:
  7549.  
  7550.            Chat discussion groups
  7551.  
  7552.            [ 1] Chat lounge (12 members)
  7553.            [ 2] Religion (no members)
  7554.            [ 3] Healthy Eating (1 member)
  7555.  
  7556.            [N]ext [P]rev [Q]uit or enter group number to join group:
  7557.  
  7558.       The user may use the next and previous keys to  move  between  pages
  7559.       in  the  event that there is more than one page of discussion groups
  7560.       to display.  Finally the user must either join  a  group  by  typing
  7561.       the number or quit, which returns to the main chat menu.
  7562.  
  7563.       13.4.5 Reading and writing chat messages
  7564.  
  7565.       Once  a  user  joins  a discussion group, the way chat operates will
  7566.       depend on whether the  user's  communication  software  can  perform
  7567.       partial  screen  scrolling, as described above.  In either case, the
  7568.       user will see the contributions to the discussion made  by  all  the
  7569.       other  participants  in  the  group.   Each  line of text from other
  7570.       users will show the BBS line number that member is on,  followed  by
  7571.       the user's name or handle, followed by the text of the message:
  7572.  
  7573.            (7) Argia: How are you doing, ACE?
  7574.  
  7575.       In  order  to contribute, the user simply types in one or more lines
  7576.       to be sent to the  other  members.   The  user  may  correct  typing
  7577.       errors  offline.   The  text is not sent to the other members of the
  7578.       group until the user presses the ENTER key.
  7579.  
  7580.       In the case that the user supports scrolling, the upper  portion  of
  7581.       the  screen  is  used  to  display output from other users while the
  7582.       lower portion of the screen  is  used  to  compose  a  contribution.
  7583.       Users  who  can  do scrolling will continue to see the contributions
  7584.       of other users while  they  compose  their  own.   However,  in  the
  7585.       non-scrolling  case,  output  from  other  users  will be suppressed
  7586.       while a message is composed.
  7587.  
  7588.       13.4.6 Chat commands
  7589.  
  7590.       While participating in a chat  group,  the  user  may  type  special
  7591.       commands  which  cause  actions  to  be  taken  instead  of  sending
  7592.       messages to the other members of the group.  For  example,  to  exit
  7593.       the  group  the  user  types a line starting with "/Q".  To find out
  7594.       who is in chat, the user can type "/W".  Finally, to send a  private
  7595.       message  to  another  member, the user can type a slash, followed by
  7596.       the line number  of  the  recipient,  followed  by  the  text.   For
  7597.       example,  to  send a private message to the member who is on line 7,
  7598.       the user might type:
  7599.  
  7600.       Chapter 13. Chat                                                 131
  7601.  
  7602.  
  7603.            /7 Hey Argia, want to have lunch one day this week?
  7604.  
  7605.       When a  private  message  is  sent,  the  sender's  line  number  is
  7606.       preceded  by  a "P" to denote private mail.  Suppose that the sender
  7607.       of this private message was on line 10:
  7608.  
  7609.            (P10) Skullman: Hey Argia, want to have lunch this week?
  7610.  
  7611.  
  7612.       13.5 Colors
  7613.  
  7614.       For users with color displays,  chat  differentiates  from  messages
  7615.       from  other  members,  a  user's own contribution, and messages from
  7616.       the chat system itself by displaying them in different colors.   You
  7617.       customize  these  colors using the SYSOP program.  This is described
  7618.       in chapter 3.
  7619.  
  7620.  
  7621.       13.6 The chat server
  7622.  
  7623.       In order to be able to use chat,  TSX-BBS  runs  a  detached  daemon
  7624.       process  named  the chat server.  This process runs the program file
  7625.       named BBSBIN:CHSERVER.EXP.  The chat server  is  detached  from  the
  7626.       system   STARTBBS.CMD  command  procedure,  and  should  require  no
  7627.       maintenance.  If the server ever does fail, you should  provide  the
  7628.       file BBS:CHAT.LOG to S&H for analysis.
  7629.  
  7630.  
  7631.       13.7 Chat menu options
  7632.  
  7633.       Normally  the  chat system is presented to a user from a single menu
  7634.       which can invoke each of the chat  functions.   However,  since  you
  7635.       are  welcome  to rearrange menus to suit your needs, you may want to
  7636.       invoke the  chat  functions  from  different  menus.   This  section
  7637.       documents  what  the chat menu functions are.  These are the actions
  7638.       which you use in the ITEM statements of a menu.   For  example,  the
  7639.       ITEM statements in the standard chat menu are:
  7640.  
  7641.            $item key=J action=chatjoin
  7642.            $item key=C action=chatmake
  7643.            $item key=H action=chathandle
  7644.            $item key=U action=chatuser
  7645.            $item key=Q action=return
  7646.            $item key=(other) action=return
  7647.  
  7648.       The chat menu actions are explained below.
  7649.  
  7650.         . Chatjoin  --  Used  when  a  user  wants  to view the discussion
  7651.           groups and possibly join one.  This action will show the user  a
  7652.           browse  list  of all the existing discussion groups if there are
  7653.           more  than  one.   However,  if  there  is  only  one   existing
  7654.           discussion  group this menu is bypassed and the user immediately
  7655.           joins the one group.
  7656.  
  7657.       Chapter 13. Chat                                                 132
  7658.  
  7659.  
  7660.         . Chatmake -- Used when a user wants to create  a  new  discussion
  7661.           group.
  7662.  
  7663.         . Chathandle -- Used to allow the user to change his chat handle.
  7664.  
  7665.         . Chatuser  --  Used  when the user wants to see a list of all the
  7666.           users who are currently in chat.
  7667.  
  7668.  
  7669.  
  7670.  
  7671.  
  7672.  
  7673.                                    Chapter 14
  7674.  
  7675.                                  Door Programs
  7676.  
  7677.  
  7678.  
  7679.  
  7680.       A "door" is an external program that is  not  part  of  the  TSX-BBS
  7681.       software  system.   Doors  are stand-alone programs that usually are
  7682.       designed to run directly under DOS; normally they are  in  the  form
  7683.       of  ".EXE"  program  images.   The most common type of door programs
  7684.       are games.
  7685.  
  7686.       Note: Although most door programs run well with TSX-BBS,  there  are
  7687.       some  door  programs  that  will  not  run  with TSX because they do
  7688.       tricky operations that depend  on  the  real  DOS  operating  system
  7689.       being  present.   The  first step in setting up a door program is to
  7690.       install it and attempt to run it with TSX as a  stand-alone  program
  7691.       in  "local"  mode.   The  method  to use for running a door in local
  7692.       mode depends on the door; many  doors  require  you  to  set  up  an
  7693.       initialization  file  with  "COM0"  as the communication port device
  7694.       name.
  7695.  
  7696.       Also note that some door programs put an  extremely  heavy  load  on
  7697.       the  system  --  equivalent  to  dozens  of  users  running  TSX-BBS
  7698.       sessions doing other things such as file library browses.   So,  you
  7699.       should  do some experimentation after installing a door to make sure
  7700.       it will  not  adversely  affect  the  performance  of  other  users.
  7701.       Section  14.5  on  page  138  discusses  how  you  can "tame" a door
  7702.       program so as to minimize its impact on the system.
  7703.  
  7704.       Before discussing how door programs can be run with  TSX-BBS,  let's
  7705.       review  how  door programs operate with traditional, single-user BBS
  7706.       systems such as Wildcat and PCBoard.  With these  systems  that  can
  7707.       only  run  one user and one program at a time, the BBS software runs
  7708.       most of the time and monitors the phone  line  for  incoming  calls.
  7709.       When  a  user connects and selects a door program from the BBS menu,
  7710.       the BBS does one of two things: it either exits to DOS with an  exit
  7711.       status  code  that can be used by a BAT file to determine which door
  7712.       to run, or it loads the door into memory with the BBS  software  and
  7713.       transfers  control  to  it (this method is not commonly used because
  7714.       there is  usually  not  enough  memory  available  to  run  the  BBS
  7715.       software  and  the door at the same time).  In either case, once the
  7716.       door begins running it takes control of  the  COM  port  controlling
  7717.       the  modem  so that it can accept commands from the user and display
  7718.       screens that will be sent to the  user.   Some  door  programs  also
  7719.       update  the  console screen image so that the sysop can observe what
  7720.       is going on.  When the user exits from the door, control returns  to
  7721.       the BBS system which resumes control of the COM port.
  7722.  
  7723.  
  7724.  
  7725.                                       133
  7726.  
  7727.       Chapter 14. Door Programs                                        134
  7728.  
  7729.  
  7730.       14.1 Running Door Programs with TSX-BBS
  7731.  
  7732.       TSX-BBS  uses  a  more  elegant but slightly more complex method for
  7733.       running door programs.  Since TSX-BBS is part of a  true  multi-user
  7734.       and  multi-tasking  operating  system  (TSX-32),  it  is  capable of
  7735.       running multiple programs at the same time.  When  a  user  requests
  7736.       that  a  door  program be run, TSX-BBS initiates ("forks") a "child"
  7737.       subtask to execute the  door.   The  TSX-BBS  program  continues  to
  7738.       exist  as  an  active  process  but  it  does  not  not  consume any
  7739.       processor time because it  goes  to  sleep  while  waiting  for  its
  7740.       "child"  process,  the  door,  to  complete.   However,  because the
  7741.       TSX-BBS process is still active, it  can  continue  to  monitor  the
  7742.       communication  line  for  loss  of carrier.  It also watches for the
  7743.       user running out of authorized connect time.  When the door  program
  7744.       terminates,  a  status  message  is  sent  to the parent TSX-BBS job
  7745.       which resumes execution.  The subtask ceases to exist once the  door
  7746.       completes its operation.
  7747.  
  7748.  
  7749.       14.2 Terminal I/O from the door program
  7750.  
  7751.       Because  of the way door programs run with DOS BBS systems, they are
  7752.       written to communicate with the user through a COM port.  Some  door
  7753.       programs  do  this  by directly programming the UART controller that
  7754.       is part of the COM device; other door  programs  do  their  terminal
  7755.       I/O  using  a  "FOSSIL"  driver.   TSX-BBS  supports  both  types of
  7756.       terminal I/O.
  7757.  
  7758.       TSX-32 supports  many  types  of  serial  communication  controllers
  7759.       including  "intelligent"  serial  multiplexers  that offload some of
  7760.       the processing from the CPU.  Because  these  devices  do  not  have
  7761.       standard  COM  port  type  controllers,  TSX-32  includes a software
  7762.       facility known as "virtual UARTs" that allows  programs  written  to
  7763.       use  standard  COM  ports  to run with any type of serial controller
  7764.       supported  by  TSX-32.   The  virtual  UART  facility  emulates  the
  7765.       operation  of the actual hardware devices and make all adapter types
  7766.       look like simple UART COM  ports  for  communication  programs  that
  7767.       perform   direct  COM  port  I/O.   This  emulation  forces  TSX  to
  7768.       intercept all IN and OUT instructions  performed  to  the  COM  port
  7769.       control  registers  by  the  door program, and convert them into the
  7770.       appropriate  commands  depending  on  the  type  of  serial  adapter
  7771.       actually in use.
  7772.  
  7773.       This   emulation   allows  programs  like  doors  and  communication
  7774.       programs such as Procomm to use any  serial  line  on  any  type  of
  7775.       adapter  that  is supported by TSX even though these programs do not
  7776.       understand how to control the actual hardware.  TSX makes it  "look"
  7777.       like  a 16550 UART type COM port.  This emulation works well but may
  7778.       result in high-speed communications being  slowed  down  because  of
  7779.       the  emulation  overhead.   The  use  of  actual 16550 type buffered
  7780.       controllers or intelligent multiplexers  reduces  the  overhead  and
  7781.       improves  throughput.  It is highly recommended that you use the TSX
  7782.       "HOST" command to place outgoing modem  calls  and  do  uploads  and
  7783.       downloads  rather  than using programs like Procomm because the HOST
  7784.       command does not use the UART emulation and is much more efficient.
  7785.  
  7786.       Chapter 14. Door Programs                                        135
  7787.  
  7788.  
  7789.       A "FOSSIL" driver is a DOS  program  that  serves  as  an  interface
  7790.       between  a program such as a door and the actual hardware COM ports.
  7791.       The programs perform system services to send and receive  characters
  7792.       and  the FOSSIL driver performs the low-level programming of the COM
  7793.       ports (or other devices  in  some  cases).   The  most  popular  DOS
  7794.       FOSSIL  drivers  are  BNU and X00.  TSX-32 has a FOSSIL driver built
  7795.       into it so you do not need to use any other FOSSIL driver.
  7796.  
  7797.       When installing a door program for  use  with  TSX-BBS,  you  should
  7798.       tell  it to use the FOSSIL driver if this is an option.  In general,
  7799.       I/O done through the FOSSIL driver  is  more  efficient  than  using
  7800.       virtual  UARTs.   If  the  program  gives you a choice of COM ports,
  7801.       tell it to use COM port 1 with a base port address of  3F8  and  IRQ
  7802.       (interrupt) level 4.
  7803.  
  7804.       Note  that  all  door  programs  should  be  directed  to COM port 1
  7805.       regardless of the actual serial line  that  the  user  is  connected
  7806.       through.   TSX  redirects  COM  port 1 I/O to the actual controlling
  7807.       terminal line while the door is running.  If multiple copies of  the
  7808.       door  program  are  running, each one "thinks" that it is talking to
  7809.       COM port 1 but the actual I/O is sent to the line for the  user  who
  7810.       is running the door.
  7811.  
  7812.  
  7813.       14.3 Drop Files
  7814.  
  7815.       Most  door  programs need to be passed some information from the BBS
  7816.       system to tell them which COM port to use, the  name  of  the  user,
  7817.       the  maximum  time  that  the  user may run, etc.  These information
  7818.       files are known as "drop" files.  There are several  types  of  drop
  7819.       files  and  some door programs require a particular type, others can
  7820.       be  instructed  to  use  one  type  or  another.   There  are   also
  7821.       conversion  programs  available  to convert one type of drop file to
  7822.       another.  The most common type of drop file, and  the  one  used  by
  7823.       TSX-BBS,  is  a  DOOR.SYS  file.   If  you  have a choice during the
  7824.       installation of the door program you should select DOOR.SYS  as  the
  7825.       drop file type.
  7826.  
  7827.       When  a user requests execution of a door program, TSX-BBS creates a
  7828.       DOOR.SYS file with information about the user  such  as  the  user's
  7829.       name,  the  number  of  minutes  of  connect  time  remaining,  etc.
  7830.       Because many users can be running door programs at  the  same  time,
  7831.       TSX-BBS  places  the  DOOR.SYS file in a temporary directory to keep
  7832.       it separate from the DOOR.SYS files for other users.   The  name  of
  7833.       the   temporary   directory   is   "TMPnn"  where  "nn"  is  a  user
  7834.       identification number that  uniquely  identifies  each  user.   This
  7835.       directory  is  a  subdirectory  of the main BBS temporary directory.
  7836.       The main temporary  directory  can  be  specified  using  the  SYSOP
  7837.       program;  it  defaults to "C:\BBSTEMP\".  So, for example, if a user
  7838.       with an ID number of 4 runs a door program, the DOOR.SYS file  would
  7839.       be  placed  in  a directory named "C:\BBSTEMP\TMP4\".  The temporary
  7840.       directory is deleted when the user logs off, along  with  any  files
  7841.       in  it.   Usually,  you  do not need to be concerned with the actual
  7842.       temporary  directory  name  because  you  can  use   the   @tempdir@
  7843.  
  7844.       Chapter 14. Door Programs                                        136
  7845.  
  7846.  
  7847.       substitution  operator  to  pass  the  directory  name  to  the door
  7848.       program.
  7849.  
  7850.  
  7851.       14.4 Setting up Menu Entries to Run Doors
  7852.  
  7853.       Most commonly, door programs are started  by  selecting  items  from
  7854.       menus.   However,  there  is  also a function in the TPL programming
  7855.       language for starting a door.  This section explains the details  of
  7856.       setting  up menu items for starting doors, see Chapter 5 for general
  7857.       information about creating menus.
  7858.  
  7859.       The "door" menu item action is used to start execution  of  a  door.
  7860.       The  door  action  begins  execution  of an external "door" program.
  7861.       The form of the action is
  7862.  
  7863.            action=door(cmdline[,message[,activity]])
  7864.  
  7865.       where 'cmdline' is the command line that is to be passed to the  TSX
  7866.       command  interpreter  to  execute the door batch file, and 'message'
  7867.       is an optional argument that  is  displayed  on  the  user's  screen
  7868.       while  the door program is being started.  You can specify something
  7869.       like "Starting chess" to give the users something to look  at  while
  7870.       the  door  is  getting  started.   The  'activity'  argument is also
  7871.       optional.  If specified, it is a  string  to  be  displayed  as  the
  7872.       current  activity  for  the  user  while  the  door is running.  For
  7873.       example, you might set the  activity  to  "Chess"  while  the  chess
  7874.       program is running.
  7875.  
  7876.       The  'cmdline' argument usually begins with the name of a batch file
  7877.       that gets the door started.  You can use either DOS style BAT  files
  7878.       or  TSX style CMD files to run door programs.  It is best to specify
  7879.       the extension as part of the file name along  with  the  device  and
  7880.       directory where the batch file is stored.
  7881.  
  7882.       After  the  name  of  the  batch  file  you  can specify one or more
  7883.       arguments to  be  passed  to  the  batch  file.   For  example,  the
  7884.       following  command  would  run a batch file named CHESS.CMD and pass
  7885.       the argument string "advanced" to it:
  7886.  
  7887.            $item key=C action=door("c:\chess\chess.cmd advanced")
  7888.  
  7889.       Substitution operators such as described in Section 3.2 may be  used
  7890.       in   the   command  arguments.   Two  of  the  most  useful  of  the
  7891.       substitution operators for  this  application  are  "@tempdir@"  and
  7892.       "@node@".   The @tempdir@ operator is replaced by the actual name of
  7893.       the temporary directory where the DOOR.SYS  file  is  written.   The
  7894.       directory  name  includes the device name and ends with a backslash.
  7895.       So, for example, if a user had ID number 43, the @tempdir@  operator
  7896.       would  be  replaced by "C:\BBSTEMP\TMP43\".  Note, the "C:\BBSTEMP\"
  7897.       portion of this specification is set using the SYSOP  program.   The
  7898.       @node@  operator  is  replaced by the line number.  So if a user was
  7899.       running on line 4, the @node@ operator would  be  replaced  by  "4".
  7900.       Another  potentially  useful substitution operator is @userid@ which
  7901.       inserts a BBS identification number that is unique  for  each  user.
  7902.  
  7903.       Chapter 14. Door Programs                                        137
  7904.  
  7905.  
  7906.       The  temporary  directory  for  the user has this number as the last
  7907.       part of its subdirectory name.
  7908.  
  7909.       For example, the following example  executes  a  door  command  file
  7910.       named  "c:\chess\chess.cmd" and passes the line number and temporary
  7911.       file directory as arguments:
  7912.  
  7913.            $item key=C action=door("c:\chess\chess.cmd @node@ @tempdir@")
  7914.  
  7915.       The commands that should be placed in the batch file  to  start  the
  7916.       door  program  will  vary  depending  on  the  needs  of  the  door.
  7917.       Usually, the command file should begin with a "CD"  command  to  set
  7918.       the  directory  where  the  door  program  is  stored as the current
  7919.       directory.  Following this there may be  other  setup  commands  and
  7920.       then the actual command to run the door program.
  7921.  
  7922.       If  you pass arguments to the batch file you should use %1, %2, etc.
  7923.       to insert them into DOS style BAT files  or  'P1',  'P2',  etc.   to
  7924.       insert  them  into TSX style CMD files.  The following is an example
  7925.       of a TSX CHESS.CMD file to start a chess program.
  7926.  
  7927.            cd \chess
  7928.            pchess /S 'p1'door.sys
  7929.  
  7930.       In the case of the pchess program, the "/S"  argument  tells  it  to
  7931.       use   a   DOOR.SYS   style   drop   file.    The   second  argument,
  7932.       "'p1'door.sys", is the file specification for the  drop  file.   The
  7933.       'p1'  parameter insertion operator is replaced by the first argument
  7934.       passed  to  the  command  file.   In  this  example  it   would   be
  7935.       appropriate  to  use  the  @tempdir@  substitution  operator for the
  7936.       first argument to cause the name of the  temporary  directory  where
  7937.       DOOR.SYS  is  stored  to  be  passed  as  the  argument.   Remember,
  7938.       @tempdir@  produces  a  full  directory  specification  including  a
  7939.       trailing  backslash;  so,  when  'p1'  is  inserted  in  the  string
  7940.       'p1'door.sys you end up with  a  full  file  specification  such  as
  7941.       "c:\bbstemp\tmp43\door.sys".   An  example  of  a  menu item line to
  7942.       start this command file is shown below.
  7943.  
  7944.            $item key=C action=door(\cs\chess.cmd @tempdir@,Starting Chess)
  7945.  
  7946.       The second  argument  to  the  door  action,  "Starting  Chess",  is
  7947.       displayed inside a box while the chess program is getting started.
  7948.  
  7949.       While  running  a  door program, all output that the program directs
  7950.       to COM 1 is sent to the user's terminal.  Output  generated  by  the
  7951.       door  program  that  would  normally appear on the console screen is
  7952.       discarded.  This can make it tricky to debug the  batch  files  that
  7953.       start  door  programs.   The best way to monitor what happens when a
  7954.       door batch file runs is to use the TSX "log  file"  facility.   This
  7955.       causes  output  generated  in  the batch file that would normally be
  7956.       displayed on the console to be written to a disk log  file.   To  do
  7957.       this  place  a  command  of the following form near the beginning of
  7958.       the batch file:
  7959.  
  7960.       Chapter 14. Door Programs                                        138
  7961.  
  7962.  
  7963.            SET LOG/FILE=filename
  7964.  
  7965.       Where 'filename' is the name of the log file to  be  created.   This
  7966.       command  should  be  placed  after the "CD" command that selects the
  7967.       current directory or you can specify a  directory  as  part  of  the
  7968.       file  name.   At the end of the batch file add the following command
  7969.       to close the log file:
  7970.  
  7971.            SET LOG/CLOSE
  7972.  
  7973.       Once you have added these commands, you can run the  door  and  then
  7974.       examine  the  log  file  to  see  if  the door program generated any
  7975.       messages.  The following is an example of a  complete  command  file
  7976.       with log file commands:
  7977.  
  7978.            cd \chess
  7979.            set log/file=chess.log
  7980.            pchess /S 'p1'door.sys
  7981.            set log/close
  7982.  
  7983.  
  7984.       14.5 Taming Door Programs
  7985.  
  7986.       Most  door  programs  are  written  to  run  in  the single-user DOS
  7987.       environment.  Because of this, they typically execute an  idle  loop
  7988.       while  waiting  for  commands  to  be  typed by the user.  This loop
  7989.       consumes CPU time and may bog down the  operation  of  other  users.
  7990.       (Note:  "native"  TSX-BBS  routines  never  loop  while  waiting for
  7991.       commands, they pause execution so that  other  users  can  run.)  To
  7992.       minimize  the  effect  of  idle  looping,  you  can use the TSX PMAN
  7993.       program to set program  attributes  so  that  TSX  will  reduce  the
  7994.       priority of these programs while they are idle.
  7995.  
  7996.       The  TSX-32  User's  Manual  fully  explains the PMAN command but we
  7997.       will summarize the basic information you need here.  Start  PMAN  by
  7998.       typing  the TSX command "PMAN".  The initial screen is a list of the
  7999.       currently installed programs.  Type 'A' to select  the  "Add  entry"
  8000.       action.   Enter  the  full  specification  of the executable program
  8001.       file in the "Program specification" field at the top of the  screen.
  8002.       This  specification should include the device, directory, file name,
  8003.       and extension (for example, "C:\CHESS\PCHESS.EXE").
  8004.  
  8005.       Next, press Page-down and locate the field named "IDLETIME"  at  the
  8006.       bottom  of  the  screen.   The idle time parameter controls how long
  8007.       TSX will allow the program to execute  at  normal  priority  between
  8008.       times  when  it sends or received characters through the controlling
  8009.       serial line.  The value is  specified  in  units  of  hundredths  of
  8010.       seconds,   so  a  value  of  200  corresponds  to  2  seconds.   The
  8011.       appropriate value to specify depends on  door  --  a  chess  program
  8012.       that  computes for a significant time each time a command is entered
  8013.       will need a larger value than  a  game  that  performs  some  simple
  8014.       action  for each command.  If you specify too large a value then the
  8015.       door program will be allowed to  run  at  the  normal  priority  for
  8016.       longer  than  necessary  causing an increased impact on other users.
  8017.       If you specify too small a value then the door may  not  finish  the
  8018.  
  8019.       Chapter 14. Door Programs                                        139
  8020.  
  8021.  
  8022.       computing  needed  to  satisfy  a  command  before  its  priority is
  8023.       reduced resulting is slow or choppy responses to  its  commands.   A
  8024.       reasonable  value  to use as an initial value for IDLETIME is 200 (2
  8025.       seconds).  You  can  then  experiment  with  running  the  door  and
  8026.       increase or decrease the value as appropriate.
  8027.  
  8028.       Once  you  have set the IDLETIME value, press ESC twice to exit from
  8029.       the PMAN program.  Program attributes set using  PMAN  are  retained
  8030.       across system restarts.
  8031.  
  8032.  
  8033.  
  8034.  
  8035.  
  8036.  
  8037.                                    Chapter 15
  8038.  
  8039.                                The SYSOP Program
  8040.  
  8041.  
  8042.  
  8043.  
  8044.       Operation  and  maintenance  of the TSX-BBS is easy, even for people
  8045.       who do not have much experience with  computers.   This  is  because
  8046.       TSX-BBS   includes  an  on-line  guide,  the  SYSOP  program,  which
  8047.       presents step by step  instructions  using  menus  and  field  entry
  8048.       screens.    Because   basic   system   management   is  either  done
  8049.       automatically by the BBS,  or  conveniently  using  the  high  level
  8050.       SYSOP  tool,  managers of TSX-BBS boards do not need to learn how to
  8051.       edit complex and cryptic control files  to  maintain  and  customize
  8052.       their  systems.   To  run the SYSOP program, simply type the command
  8053.       SYSOP.  SYSOP is menu driven; pressing either ESC or  X  (for  eXit)
  8054.       from the main menu will exit the SYSOP program.
  8055.  
  8056.       Many  of  the  system  configuration options you set using the SYSOP
  8057.       program are stored  in  the  board  configuration  file  CONFIG.BBS.
  8058.       This  includes  color  selections, chat groups, mail routes, general
  8059.       settings, QWK configuration, utility scheduling,  and  more.   SYSOP
  8060.       remembers  all  the  changes you make and writes out an updated copy
  8061.       of CONFIG.BBS (if you make any changes at all)  when  you  exit  the
  8062.       program.
  8063.  
  8064.       Because   of  the  way  SYSOP  remembers  and  stores  configuration
  8065.       information,  SYSOP  will  not  permit  two  system   operators   to
  8066.       simultaneously  make  such  configuration  changes.   However, since
  8067.       other functions (such as the current system  status  display,  known
  8068.       as  the  dashboard) are also accessible from the SYSOP program, more
  8069.       than  one  SYSOP  is  allowed   to   be   in   the   SYSOP   program
  8070.       simultaneously.   Should  another  system  operator be running SYSOP
  8071.       when you start the program, you will receive the message:
  8072.  
  8073.            +------------------------------------+
  8074.            | Configuration is locked by another |
  8075.            | sysop, other functions available   |
  8076.            +---- Press any key to continue -----+
  8077.  
  8078.       The following sections discuss each SYSOP function in detail.
  8079.  
  8080.  
  8081.       15.1 General Setup
  8082.  
  8083.       Miscellaneous BBS configuration parameters  are  entered  using  the
  8084.       general  set  up screen, shown below.  An explanation of each of the
  8085.       fields follows.
  8086.  
  8087.  
  8088.  
  8089.                                       140
  8090.  
  8091.       Chapter 15. The SYSOP Program                                    141
  8092.  
  8093.  
  8094.       +------------------ TSX Sysop Management Utility ------------------+
  8095.       |##################################################################|
  8096.       |#+----------------- General Setup Parameters -----------------+###|
  8097.       |#|                                                            |###|
  8098.       |#| BBS name:               __________________________________ |###|
  8099.       |#| Location:               __________________________________ |###|
  8100.       |#| Phone number:           ________________________           |###|
  8101.       |#| QWK ID:                 _________                          |###|
  8102.       |#| Sysop 1 name:           _____________________________      |###|
  8103.       |#| Sysop 2 name:           _____________________________      |###|
  8104.       |#| Sysop 3 name:           _____________________________      |###|
  8105.       |#| Inactivity limit:       0________                          |###|
  8106.       |#| Allow handles:          N                                  |###|
  8107.       |#| Callback verification:  N                                  |###|
  8108.       |#|                                                            |###|
  8109.       |#|                                                            |###|
  8110.       |#+-------------------- ESC=Save, F4=Abort --------------------+###|
  8111.       |##################################################################|
  8112.       +------------------------------------------------------------------+
  8113.  
  8114.       BBS Name should be filled in with the  name  of  your  board.   This
  8115.       board  identification  can  then  be  included  in  screens wherever
  8116.       appropriate.  The @bbsname@ construct expands to the  name  you  put
  8117.       in  this  field.   For example, the standard GOODBYE phrase, used by
  8118.       LOGON.TPL when a user logs off (if no goodbye file  exists),  thanks
  8119.       the user for calling @bbsname@.
  8120.  
  8121.       Location  should  be  filled  in  with  your  location (e.g., Dallas
  8122.       Texas).   It  can  retrieved  for  screens  using   the   @location@
  8123.       construct.
  8124.  
  8125.       Phone number is the primary phone number for your board.
  8126.  
  8127.       QWK  ID is the short BBS ID code which is included in downloaded QWK
  8128.       packets.  Note that QWK packets also include the BBS name.
  8129.  
  8130.       Sysop 1 through Sysop 3 are expanded  by  the  constructs  @sysop1@,
  8131.       @sysop2",  and  @sysop3@  constructs.  Additionally, the first sysop
  8132.       listed is the person who receives mail when a user asks  to  send  a
  8133.       mail message to the sysop.
  8134.  
  8135.       The  inactivity  limit field is used to log users off after they are
  8136.       inactive for a period of time.  This  feature  prevents  users  from
  8137.       tying  up  phone lines which they are not actually using.  The value
  8138.       specifies how many minutes of inactivity a user is permitted  before
  8139.       being  forced  off.   Note  that  users  receive one warning message
  8140.       before  the  logoff  occurs.   To  specify  that  users  can  remain
  8141.       inactive  for  an  indefinite  period  of  time,  specify  0 for the
  8142.       inactivity limit.
  8143.  
  8144.       The allow handles field is a yes/no field  which  specifies  whether
  8145.       users  can  select  handles,  or  alias  names,  for the purposes of
  8146.       electronic mail messages and chat groups.
  8147.  
  8148.       Chapter 15. The SYSOP Program                                    142
  8149.  
  8150.  
  8151.       Callback verification is a yes/no field which specifies whether  you
  8152.       want  the LOGON.TPL program to perform callback verification for new
  8153.       users.  Callback verification is described in Chapter 6.2, page 63.
  8154.  
  8155.  
  8156.       15.2 User Authorization
  8157.  
  8158.       Most sysops do not want to give all callers to  the  bulletin  board
  8159.       equal,  unrestricted  access.  Although you can easily configure the
  8160.       system for such an open door policy, TSX-BBS  incorporates  numerous
  8161.       features  designed  to  identify  users,  and  define different user
  8162.       classes with different access privileges.  At the  center  of  these
  8163.       features  is the User Authorization File (UAF), often referred to as
  8164.       the "Userlog".   This  section  provides  an  overview  of  how  the
  8165.       TSX-BBS  security  system  works,  and  explains  how to manage user
  8166.       authorization records using the SYSOP program.
  8167.  
  8168.       In order to be granted access  to  the  board,  users  must  log  in
  8169.       providing  a  first  and last name.  Even if you wanted to grant all
  8170.       callers equal access, the  system  must  log  users  in  because  it
  8171.       maintains  critical  information for them in the UAF including their
  8172.       terminal configuration, message counts, and form selections.
  8173.  
  8174.       User data is stored in  a  disk  file  called  UAF.BBS.   While  the
  8175.       system   is  running,  a  daemon  process  called  the  Name  Server
  8176.       coordinates access to the UAF, providing  information  needed  about
  8177.       users  while  they  are  on  the  board, storing updated information
  8178.       about them, and communicating with  the  system  manager  about  new
  8179.       accounts.
  8180.  
  8181.       Because  the  name  server  utilizes  the  advanced  virtual  memory
  8182.       management of the TSX-32  platform  to  maintain  recently  accessed
  8183.       information  and  provide  immediate  access to the data in the user
  8184.       file, it is practical  to  run  a  system  with  many  thousands  of
  8185.       authorized users without compromising system performance.
  8186.  
  8187.       As   we   will  see,  the  UAF  organizes  the  critical  privileges
  8188.       associated  with  user  records  into  user   classes,   making   it
  8189.       convenient  for  the  SYSOP  to  specify  the  access for new users,
  8190.       paying customers, expired accounts, or any other classes  which  you
  8191.       decide are meaningful for your installation.
  8192.  
  8193.       Furthermore,   each  user  can  have  individual  privileges  (whose
  8194.       meaning are defined by you) to allow  you  complete  flexibility  in
  8195.       tailoring access for individual BBS users.
  8196.  
  8197.       UAF  management  is  accessed from the SYSOP main menu by typing 'U'
  8198.       to select "User authorization".  When you do, you be presented  with
  8199.       a  browse  screen showing the currently authorized users.  The first
  8200.       time you select the user browse screen, it  will  be  blank  because
  8201.       nobody  has  been  authorized  to use your board.  After a few users
  8202.       are authorized, the screen will look like this:
  8203.  
  8204.       Chapter 15. The SYSOP Program                                    143
  8205.  
  8206.  
  8207.       +------------------ TSX Sysop Management Utility ---------------+
  8208.       |###############################################################|
  8209.       |##+------------ Users ------------+##+---- Action keys -----+##|
  8210.       |##| Cappannari, Dan               |##| Enter = Edit         |##|
  8211.       |##| Clown, Binky                  |##| A     = Add          |##|
  8212.       |##| Mott, John                    |##| C     = Class        |##|
  8213.       |##| Sherrod, Phil                 |##| D     = Delete       |##|
  8214.       |##|                               |##| F     = Find         |##|
  8215.       |##|                               |##| M     = Modify       |##|
  8216.       |##|                               |##| P     = Privileges   |##|
  8217.       |##|                               |##| U     = User classes |##|
  8218.       |##|                               |##| X     = Exit         |##|
  8219.       |##|                               |##+----------------------+##|
  8220.       |##|                               |############################|
  8221.       |##+-------------------------------+############################|
  8222.       |###############################################################|
  8223.       +---------------------------------------------------------------+
  8224.  
  8225.       This is the user browse screen used to access  all  the  SYSOP  user
  8226.       authorization  functions.   The  action  keys  on the right show the
  8227.       available functions.  A highlight bar shows which user is  currently
  8228.       selected.   Functions  such  as  modify  or  delete  operate  on the
  8229.       currently selected user, while others such as  privileges  and  user
  8230.       classes apply to user authorization as a whole.
  8231.  
  8232.       In  the  sections that follow we will describe adding, deleting, and
  8233.       modifying user records.  Then, we will introduce  user  classes  and
  8234.       privileges.
  8235.  
  8236.       15.2.1 Adding New Users
  8237.  
  8238.       It  is  not necessary for you to add a new user to the UAF before he
  8239.       can get on  to  your  board.   Normally,  people  who  are  not  yet
  8240.       authorized  to  use  the system are permitted to register themselves
  8241.       as new users, and are granted the access  restrictions  you  specify
  8242.       for  the  user  class  named  BASIC  (user classes will be explained
  8243.       shortly).  Later, you may elect to  upgrade  this  user  to  a  more
  8244.       advanced class (for example, when he pays an access fee).
  8245.  
  8246.       However,  you  may  directly  enter new users into the UAF yourself,
  8247.       specifying any access levels you wish.  To  do  this,  first  access
  8248.       the  user  browse  screen  by  selecting User authorization from the
  8249.       main SYSOP menu.  You want to add a new user so you type the  letter
  8250.       'A'  for  Add  (no Enter key is needed).  Doing so will place you in
  8251.       the first page of the multi page user  information  screen  used  to
  8252.       enter  and  modify  user  authorization  records.   This will appear
  8253.       similar to the figure below (although some fields are  omitted  from
  8254.       the figure for sake of brevity):
  8255.  
  8256.       Chapter 15. The SYSOP Program                                    144
  8257.  
  8258.  
  8259.       +----------------- TSX Sysop Management Utility -------------------+
  8260.       |#+------------------- Authorization Record ---------------------+#|
  8261.       |#| First name:     _____________    Expires:         ________   |#|
  8262.       |#| Last  name:     _____________    ANSI:            _          |#|
  8263.       |#| Password:       _____________    Color:           _          |#|
  8264.       |#| Birthdate:      _____            IBM characters:  _          |#|
  8265.       |#| Chat handle:    _____________    Protocol:        _______ *  |#|
  8266.       |#| Address 1:      _______________  Security:        ___        |#|
  8267.       |#| Address 2:      _______________  Status:          _ *        |#|
  8268.       |#| City:           _______________  Language:        ________ * |#|
  8269.       |#| State:          _______________  Scroll:          _          |#|
  8270.       |#| Data #:         _______________  Called back:     _          |#|
  8271.       |#| User class:     __________________                           |#|
  8272.       |#| Credit card #:  __________________                           |#|
  8273.       |#|   type:         _______                                      |#|
  8274.       |#|   expires:      _____                                        |#|
  8275.       |#| Comment 1:      ____________________________________________ |#|
  8276.       |#| Comment 2:      ____________________________________________ v#|
  8277.       |#+----------- F1=Help, F4=Quit, ESC=Save --------- Page 1 of 3 -+#|
  8278.       +------------------------------------------------------------------+
  8279.  
  8280.       Fill  in  the  demographic  information  (such as name, address, and
  8281.       phone number) for the new user.  While  in  the  field  editor,  the
  8282.       ENTER  key  is  used  to move to the next field.  Up and down arrows
  8283.       move between fields, while right and left  arrows  move  within  the
  8284.       current  field.   Other  within  field  keys such as insert, delete,
  8285.       home, and end are also supported.  The page up and  page  down  keys
  8286.       are used to move between the multiple pages of the user record.
  8287.  
  8288.       You  will  probably  not want to fill in fields which provide access
  8289.       restrictions, such as privileges, message limit, daily  time  limit,
  8290.       and  so  forth.   These  fields  will  be filled in for you when you
  8291.       select a class for the new user, which will be described below.
  8292.  
  8293.       Some of the fields in the user record, such as  the  date  the  user
  8294.       last  logged  into the board, are for your information only, and can
  8295.       not be modified by you.
  8296.  
  8297.       Field  entry  screens  in  SYSOP  always  provide  instructions  for
  8298.       leaving  the screen on the bottom border.  You may press ESC to save
  8299.       the new record or F4 to discard it.  If you press ESC, you  will  be
  8300.       returned  to  the  user  browse,  which  will  now include the newly
  8301.       authorized user.
  8302.  
  8303.       15.2.2 Modifying Users
  8304.  
  8305.       To  modify  or  view  information  for  an  existing  user,   simply
  8306.       highlight  the  user  (you  can either use page up, page down, home,
  8307.       end, and arrow keys to move the highlight bar or you  can  type  'F'
  8308.       for  the  find function and move directly to the user) and press 'M'
  8309.       for modify.  The user information screen will  appear  with  current
  8310.       settings  for  the  user  filled  in.   After  you  make the desired
  8311.       changes, press ESC to save them or F4 if you need to discard them.
  8312.  
  8313.       Chapter 15. The SYSOP Program                                    145
  8314.  
  8315.  
  8316.       15.2.3 Removing Users
  8317.  
  8318.       Although TSX-BBS  allows  user  accounts  to  expire,  and  provides
  8319.       automatic  access  restrictions  for expired accounts, you will want
  8320.       to periodically purge the UAF of old  records.   To  remove  a  user
  8321.       from  the  user  authorization file, highlight the user as described
  8322.       above and press 'D' for delete.  You will be asked  to  confirm  the
  8323.       deletion  of  the  user.   Once  you confirm by typing 'Y', the user
  8324.       record will be irretrievably deleted.
  8325.  
  8326.       15.2.4 User Classes and Privileges
  8327.  
  8328.       Some of the  fields  in  the  user  information  screen  define  the
  8329.       privileges  and  levels  of access which the user has to your board.
  8330.       Although you can set each of these  fields  on  an  individual  user
  8331.       basis, this can become tedious.
  8332.  
  8333.       To  simplify  management  of  these  various  access levels, TSX-BBS
  8334.       provides "user  classes".   Each  user  class  has  a  name  and  an
  8335.       associated  set  of privileges and access limits.  In one operation,
  8336.       you can assign a class to a user.  This has the effect  of  changing
  8337.       all  of  the  user's  privileges and limits to match those specified
  8338.       for the class.   This  makes  it  easy  to  upgrade  users  as  they
  8339.       register  or  downgrade them as they expire.  Class assignments take
  8340.       place in two ways: you (the sysop) can assign a class to a  user  at
  8341.       any  time.   The  class  can be assigned by using the SYSOP program.
  8342.       You just select a user and indicate which class to assign.
  8343.  
  8344.       The second type of class assignment is  performed  automatically  by
  8345.       TSX-BBS  when some event occurs.  For example, when a new user first
  8346.       logs  on  and  enters  basic  information  that  user  is  initially
  8347.       assigned  the BASIC class.  Typically, the sysop defines BASIC class
  8348.       to provide limited access to the system.  If  callback  verification
  8349.       is  used,  the user's class is changed to VERIFIED once the callback
  8350.       verification  is  successfully  completed.    If   you   assign   an
  8351.       expiration  date to a user and the date passes, the user is assigned
  8352.       the EXPIRED class.
  8353.  
  8354.       TSX-BBS comes  with  the  following  predefined  classes.   You  are
  8355.       welcome  to  define new classes and modify the privileges and limits
  8356.       associated with these classes.
  8357.  
  8358.       BASIC -- This class is assigned to new users once they  enter  basic
  8359.           information including their name, address, and phone numbers.
  8360.  
  8361.       VERIFIED  --  This  class  is  assigned  to  a user who successfully
  8362.           completes callback verification.
  8363.  
  8364.       REGISTERED -- This class is available  for  the  sysop  to  manually
  8365.           assigned  to  users  who  send  in registrations.  TSX-BBS never
  8366.           assigns this class on an automatic basis.
  8367.  
  8368.       EXPIRED -- If a user has an expiration date, this class is  assigned
  8369.           to  the  user  the  first  time  the  user  logs  on  after  the
  8370.           expiration date.
  8371.  
  8372.       Chapter 15. The SYSOP Program                                    146
  8373.  
  8374.  
  8375.       Once you install TSX-BBS, you are welcome to customize the  built-in
  8376.       classes  which come with the board and define new user classes.  For
  8377.       example, you may want to define a class named GOLD to provide  extra
  8378.       access   levels  to  users  who  pay  a  premium  subscription  fee.
  8379.       However, be aware that the BASIC, VERIFIED, and EXPIRED classes  are
  8380.       used by the standard LOGON and CALLBACK programs.
  8381.  
  8382.       Adding,  modifying, and deleting user classes is similar to managing
  8383.       individual user records.  From the user browse  screen,  select  'U'
  8384.       for  User  classes  and  you  will  be placed in a second user class
  8385.       browse screen similar to the one depicted below:
  8386.  
  8387.       +------------------ TSX Sysop Management Utility --------------+
  8388.       |##############################################################|
  8389.       |##+---------- User Classes ----------+#+- Action keys --+#####|
  8390.       |##| Basic                            |#| Enter = Edit   |#####|
  8391.       |##| Registered                       |#| A     = Add    |#####|
  8392.       |##| Expired                          |#| D     = Delete |#####|
  8393.       |##|                                  |#| M     = Modify |#####|
  8394.       |##|                                  |#| X     = Exit   |#####|
  8395.       |##|                                  |#+----------------+#####|
  8396.       |##|                                  |########################|
  8397.       |##+----------------------------------+########################|
  8398.       |##############################################################|
  8399.       +--------------------------------------------------------------+
  8400.  
  8401.       New classes are created by typing 'A' for add.  Much like  the  user
  8402.       browse,  the  highlight bar selects which class is acted upon by the
  8403.       delete  and  modify  functions.   Entry  and  modification  of  user
  8404.       classes is done using a field edit screen which looks like this:
  8405.  
  8406.       +------------------ TSX Sysop Management Utility ------------------+
  8407.       |#+------------------- User Class Description -------------------+#|
  8408.       |#| Class name:                 Basic_______________________     |#|
  8409.       |#| Minutes per day allowed:    _________                        |#|
  8410.       |#| Daily download byte limit:  _________                        |#|
  8411.       |#| Security level:             33_______                        |#|
  8412.       |#| Messages stored:            100______                        |#|
  8413.       |#|                                                              |#|
  8414.       |#|     Built in  privileges         Sysop defined privileges    |#|
  8415.       |#| ----------------------------     ------------------------    |#|
  8416.       |#| P00 Forum:            Y          S00 Adult:            N     |#|
  8417.       |#| P01 Mail:             Y          S01 Corporate Forum:  N     |#|
  8418.       |#| P02 Download:         N          S02 XYZ Corp Files:   N     |#|
  8419.       |#| P03 Upload:           N                                      |#|
  8420.       |#| P04 Vote:             N                                      |#|
  8421.       |#| P05 Drop to TSX:      N                                      |#|
  8422.       |#| P06 File library      N                                      |#|
  8423.       |#|                                                              |#|
  8424.       |#+--------------------- F4=Quit, ESC=Save ----------------------+#|
  8425.       +------------------------------------------------------------------+
  8426.  
  8427.       The  first  fields  on  this  screen  provide  various  access level
  8428.       restrictions.  These include the total number  of  minutes  per  day
  8429.       the  user is allowed on the board, the total number of bytes per day
  8430.  
  8431.       Chapter 15. The SYSOP Program                                    147
  8432.  
  8433.  
  8434.       the user is allowed to download, and the total  number  of  messages
  8435.       the user is allowed to store in the message filing cabinet.
  8436.  
  8437.       The  security level is a numeric value which can be tested using the
  8438.       PRIVLEV system variable in conditional  expressions.   For  example,
  8439.       you  may  designate  that  only  users  with  security level 7000 or
  8440.       higher are given access to the corporate data file area by  using  a
  8441.       privilege expression of the form "PRIVLEV>=7000".
  8442.  
  8443.       The  remainder  of the user class definition consists of two sets of
  8444.       privileges:  those  which  are  built-in  and  used  internally   by
  8445.       TSX-BBS,  and  those  which you have defined yourself for customized
  8446.       access control.  The  built-in  privileges  have  obvious  meanings.
  8447.       For  example,  in  order  for  a  user to be able to access any mail
  8448.       function, he must have mail privilege.
  8449.  
  8450.       Sysop  defined  privileges  can  be  used   whenever   a   privilege
  8451.       expression  is  permitted  to  control access to a system component.
  8452.       For example, a privilege expression can control whether  a  user  is
  8453.       permitted  access  to  a  specific  file library.  You may designate
  8454.       sysop privilege S01 as ADULT and restrict access to the  adult  file
  8455.       library  by  specifying  "S01"  as the access expression.  Privilege
  8456.       expressions are  complete  logical  expressions,  so  that  you  can
  8457.       require  combinations  of  privileges (as in "S01&&S02") or any of a
  8458.       set of privileges (as in "S01||S02") for access control.   Privilege
  8459.       access  expressions  can  also  be  used to control various types of
  8460.       access to forums, menus, and may  be  used  in  TPL  programs.   See
  8461.       Chapter 4 for a full explanation of privilege expressions.
  8462.  
  8463.       You  create  sysop  defined  privileges  from  the  main user browse
  8464.       screen by typing 'P' for  privileges.   You  will  be  placed  in  a
  8465.       screen  that allows you to specify the names for up to 80 privileges
  8466.       with labels S00 through S79.   All  the  privileges  for  which  you
  8467.       specify   names   are  included  automatically  in  the  user  class
  8468.       definition screen.  Once you  have  defined  privileges,  they  will
  8469.       also appear in the user information screen for individual users.
  8470.  
  8471.       Once  a  user class is defined, the class may be assigned to a user.
  8472.       To do this, highlight the user in the user browse and type  'C'  for
  8473.       Class.   You  must then choose a class from a pop-up menu listing of
  8474.       all the currently defined user classes.
  8475.  
  8476.       When you assign a new  class  to  a  user,  it  has  the  effect  of
  8477.       "stamping"  that  user record with all the access controls which are
  8478.       defined for the new user class.  Suppose that  you  have  defined  a
  8479.       class  named  STUDENT  which  permits  one  hour of connect time and
  8480.       forum  privilege,  denies  chat  privilege,  but  does  not  specify
  8481.       anything  else  (all  other fields in the class description are left
  8482.       blank).  If you assign STUDENT class to a  user,  the  connect  time
  8483.       limit  will  be  set to 60 minutes, forum privilege will be granted,
  8484.       chat privilege will be denied, but all other fields  of  the  user's
  8485.       record will be left untouched.
  8486.  
  8487.       Chapter 15. The SYSOP Program                                    148
  8488.  
  8489.  
  8490.       15.3 Scheduling Utilities
  8491.  
  8492.       15.3.1 Introduction
  8493.  
  8494.       Because  TSX-BBS  runs under the TSX-32 multi-user operating system,
  8495.       it is never necessary to take the  board  down  to  perform  regular
  8496.       file  maintenance  such  as  squeezing the mail database or cleaning
  8497.       old messages out of forums.  Software components like the  mail  and
  8498.       forum  system were designed so that these maintenance procedures can
  8499.       be active  at  the  same  time  that  users  access  the  databases.
  8500.       TSX-BBS  comes  with file maintenance programs that periodically run
  8501.       as background "daemons" or "detached jobs".  The sysop has  control,
  8502.       through  the  utility  scheduling  facility of the SYSOP program, of
  8503.       how often (and at what time) these  background  daemons  run.   This
  8504.       section  discusses  how  to  use this scheduling facility.  Specific
  8505.       information about what each file maintenance program does  is  found
  8506.       in  the  appropriate  section  of the manual.  For example, the mail
  8507.       database sweeper is documented in  the  chapter  on  the  electronic
  8508.       mail  system.   In addition, a summary of the scheduled events and a
  8509.       description of the schedule server itself can be  found  in  Chapter
  8510.       20.
  8511.  
  8512.       A  running  TSX-BBS  system  includes a permanent detached job named
  8513.       the Scheduler.   The  scheduler  is  responsible  for  invoking  the
  8514.       various  maintenance and communication programs which need to be run
  8515.       on a periodic basis.  When you use the SYSOP  schedule  facility  to
  8516.       manage  the  schedules  for  these  event,  you  modify a file named
  8517.       BBS:SCHEDULE.CTL.   This  file,  containing  the  schedule   control
  8518.       information,  is  read  by  the scheduler daemon when it starts, and
  8519.       re-read when you make a change.
  8520.  
  8521.       15.3.2 What Can Be Scheduled
  8522.  
  8523.       Your TSX-BBS  system  comes  configured  with  reasonable  schedules
  8524.       built  in  for  all the file maintenance programs which are included
  8525.       with the system.  These include the mail sweeper and forum sweeper.
  8526.  
  8527.       If you acquire optional system  components  from  S&H,  you  may  be
  8528.       instructed   to   use   the  scheduling  screens  to  add  new  file
  8529.       maintenance or communications programs to the system at that time.
  8530.  
  8531.       In addition, you are welcome  to  use  the  scheduling  facility  to
  8532.       schedule execution of your own programs and batch files.
  8533.  
  8534.       15.3.3 The Schedule Browse Screen
  8535.  
  8536.       To  access the schedule system, type 'S' for schedule from the SYSOP
  8537.       main menu.  You will be placed in a browse screen  showing  all  the
  8538.       currently scheduled utilities:
  8539.  
  8540.       Chapter 15. The SYSOP Program                                    149
  8541.  
  8542.  
  8543.       +------------------ TSX Sysop Management Utility ------------------+
  8544.       |##################################################################|
  8545.       |#+--------- Scheduled Utilities ----------+#+- Action keys --+####|
  8546.       |#| Forum Sweeper                          |#| Enter = Edit   |####|
  8547.       |#| Mail Sweeper                           |#| A     = Add    |####|
  8548.       |#|                                        |#| D     = Delete |####|
  8549.       |#|                                        |#| E     = Edit   |####|
  8550.       |#|                                        |#| X     = Exit   |####|
  8551.       |#|                                        |#+----------------+####|
  8552.       |#|                                        |#######################|
  8553.       |#+----------------------------------------+#######################|
  8554.       |##################################################################|
  8555.       +------------------------------------------------------------------+
  8556.  
  8557.       While  in  the browse screen, a highlight bar indicates which of the
  8558.       scheduled utilities (or events) is currently selected.  You can  use
  8559.       the  arrow  keys,  page  up,  page  down, home, and end to move this
  8560.       highlight bar.  An action key box on the right indicates  what  keys
  8561.       to  press for various actions.  The edit and delete actions apply to
  8562.       the currently selected utility.
  8563.  
  8564.       When you are finished with the schedule system, press 'X' or ESC  to
  8565.       return to the SYSOP main menu.
  8566.  
  8567.       15.3.4 Modifying an Existing Schedule
  8568.  
  8569.       To  modify  an  existing  schedule,  highlight  it  and press 'E' or
  8570.       ENTER.  You will be  placed  in  the  first  page  of  the  schedule
  8571.       information screen:
  8572.  
  8573.       +----------------- Schedule for Forum Sweeper ------------------+
  8574.       |                                                               |
  8575.       | Name:      Forum Sweeper___________________________           |
  8576.       | Program:   BBS:FSWEEP.CMD__________________________           |
  8577.       | Log file:  BBS:FSWEEP.LOG__________________________           |
  8578.       | Tag name:  FSWEEP                                             |
  8579.       |                                                               |
  8580.       |                Schedule begins on next page                   |
  8581.       |                                                               v
  8582.       +--------------------- ESC=Save, F4=Abort -------- Page 1 of 5 -+
  8583.  
  8584.       The  first page describes the event being scheduled.  The name field
  8585.       specifies the title which appears  on  the  schedule  browse  screen
  8586.       (this is used for display purposes only).
  8587.  
  8588.       The  program  field  defines  what  action the Scheduler daemon will
  8589.       take when  the  time  comes  for  the  event  to  take  place.   The
  8590.       Scheduler  can  run  batch  files or programs.  If the program field
  8591.       contains a filename with the extension of EXE,  EXP,  or  COM,  then
  8592.       this  is  assumed  to  be a program.  If it contains a filename with
  8593.       the extension of BAT or CMD, the file  is  assumed  to  be  a  batch
  8594.       file.
  8595.  
  8596.       In  the example shown above, the forum sweeper is specified in terms
  8597.       of a command file name, BBS:FSWEEP.CMD (the extension  .cmd  is  the
  8598.  
  8599.       Chapter 15. The SYSOP Program                                    150
  8600.  
  8601.  
  8602.       32-bit  equivalent  of  a  16-bit  batch file, .BAT).  The Scheduler
  8603.       recognizes that FSWEEP is a command file (instead of  an  executable
  8604.       program) because of the .CMD extension.
  8605.  
  8606.       Each  time that the program or batch file is run, a log file is left
  8607.       on the disk so you can be sure that it completed successfully.   The
  8608.       log  file  contains the same information which would be displayed on
  8609.       the screen if you ran the  program  or  batch  file  at  the  system
  8610.       console.   The  name  of  this log file is specified in the log file
  8611.       field.
  8612.  
  8613.       Each scheduled event can have a tag name associated  with  it.   The
  8614.       tag  name is used to ask the schedule server to invoke the specified
  8615.       event right now.  For example, when a user  sends  a  Fidonet  crash
  8616.       message,  the  BBS  engine  uses  the reserved tag name FIDOSCAN and
  8617.       asks the schedule server to start a Fidonet mail scan  so  the  mail
  8618.       can be sent immediately.
  8619.  
  8620.       Subsequent  screens  show  what  times  during  the day you want the
  8621.       scheduled utility to be run.  Times can be  specified  at  5  minute
  8622.       intervals.   Each  time  field is a yes/no field; simply enter a 'Y'
  8623.       in the field to ask the scheduler to run the program or  batch  file
  8624.       at the indicated time.
  8625.  
  8626.       You  may  watch  the activity of the Scheduler itself by viewing the
  8627.       event log BBSSCH.  To do this, issue the  SHOW  EVENT  command  from
  8628.       the TSX-32 system prompt, highlight BBSSCH, and press ENTER.
  8629.  
  8630.       15.3.5 Adding a New Schedule
  8631.  
  8632.       To  add a new program or batch file to the list of scheduled events,
  8633.       type 'A' from the schedule browse screen.  You  will  be  placed  in
  8634.       the  same  schedule  information  screen used for modifying existing
  8635.       schedules.  Be sure that you  correctly  specify  the  name  of  the
  8636.       program  or  batch  file.   The  program  and log file fields should
  8637.       include the disk and directory name.
  8638.  
  8639.       After you have scheduled a new utility, you should  wait  until  the
  8640.       first  scheduled  time  has  passed  and look for the log file to be
  8641.       sure that the scheduler is properly invoking it.
  8642.  
  8643.       Note that TSX command procedures have  many  powerful  features  not
  8644.       found  in standard DOS batch files.  Refer to the TSX-32 or TSX-Lite
  8645.       documentation for full information.  The HELP command also  includes
  8646.       on-line  help  for  command  file constructs such as IF, GOTO, EXIT,
  8647.       CHAIN, ON, Assignments, and lexical functions.
  8648.  
  8649.       15.3.6 Deleting a Schedule
  8650.  
  8651.       To remove a program  or  batch  file  from  the  list  of  scheduled
  8652.       events,  highlight it in the schedule browse screen and type 'D' for
  8653.       delete.  You will be asked for confirmation and you  must  type  'Y'
  8654.       to be certain that you want to delete the event.
  8655.  
  8656.       Chapter 15. The SYSOP Program                                    151
  8657.  
  8658.  
  8659.       Note  that  deleting  an  event from the list of scheduled utilities
  8660.       does not remove the program or batch file from  the  hard  disk;  it
  8661.       merely removes the schedule from the schedule database.
  8662.  
  8663.  
  8664.       15.4 Color Customization
  8665.  
  8666.       TSX-BBS  users  can separately specify whether they want ANSI escape
  8667.       sequences and whether they want these to include color sequences.
  8668.  
  8669.       ANSI and color are two separate options offered to the user  in  the
  8670.       on-line  Configuration  Options  Menu and controlled by the SYSOP in
  8671.       the UAF.  However, the user will not  receive  any  color  sequences
  8672.       unless ANSI is also specified.
  8673.  
  8674.       When  constructing screens, TSX-BBS can be directed to include color
  8675.       sequences in two different ways.  First, colors can be specified  in
  8676.       terms   of  PC  color  attribute  bytes.   For  example,  the  color
  8677.       attribute hex 01 indicates a black background and a blue  foreground
  8678.       (a  full  explanation  of  PC attribute bytes is provided in chapter
  8679.       3).
  8680.  
  8681.       However, specifying colors in terms of literal attribute values  can
  8682.       be  inconvenient,  since it requires you to remember what values are
  8683.       used for various types of text, and requires you to  keep  track  of
  8684.       what  colors  each value means.  To make color customization easier,
  8685.       TSX-BBS maintains a set of colors  for  common  uses  such  as  menu
  8686.       text,  hot  characters, box borders, and so forth.  Then, instead of
  8687.       referring to colors by their attribute  value,  you  can  use  names
  8688.       such as "HOTKEY" or "MENUBOX".
  8689.  
  8690.       These  rules  for  specifying  colors  in  screens  you  design  are
  8691.       discussed in Chapter3, Page21.  These named  colors  are  also  used
  8692.       automatically  by  the  various  built-in functions of the BBS.  For
  8693.       example,  certain  colors  are  designated  for  editor  text,  chat
  8694.       display, file library lists, and so on.
  8695.  
  8696.       TSX-BBS  provides  attractive default color values for each of these
  8697.       colors.  However, you can customize the  default  color  assignments
  8698.       by selecting the Colors option from the SYSOP main menu.
  8699.  
  8700.       The  color  manager  is  organized  into  a  set of example screens,
  8701.       including screens from chat,  the  editor,  the  file  library,  and
  8702.       menus.   This  set  of  examples is designed to provide at least one
  8703.       instance of every named color used by the BBS.   However,  there  is
  8704.       considerable  overlap.   For  example,  common  text is shown in the
  8705.       color called "BASE", which appears on most of the screens  shown  in
  8706.       the color manager.
  8707.  
  8708.       When  you  select  an  example  from  the list provided, you will be
  8709.       placed in a color modification screen  like  the  one  shown  below.
  8710.       Obviously,  you  must  be  using  a  color  monitor when customizing
  8711.       system colors.
  8712.  
  8713.       Chapter 15. The SYSOP Program                                    152
  8714.  
  8715.  
  8716.       +------------------ Menu colors -------------------++------+
  8717.       | +-----------------------+                        ||  F B |
  8718.       | | TSX-32 Bulletin Board |                        || ---- |
  8719.       | +-----------------------+                        ||  X>X |
  8720.       |   [E]lectronic mail                              ||  X X |
  8721.       |   [D]iscussion Forums                            ||  X X |
  8722.       |   [C]hat                                         || >X X |
  8723.       |   [G]oodbye                                      ||  X X |
  8724.       |                                                  ||  X X |
  8725.       | Choice:                                          ||  X X |
  8726.       |                                                  ||  X X |
  8727.       +-------------------- ESC=Save --------------------+|  X X |
  8728.       +----- Use arrows to select, ENTER to modify ------+|  X X |
  8729.       | > Base color                                     ||  X X |
  8730.       |   Hot keys                                       ||  X X |
  8731.       |   Brackets around hot characters                 ||      |
  8732.       |   Color for menu title box lines                 ||      |
  8733.       |   Color for text for menu title                  ||      |
  8734.       +-------------------- ESC=Save --------------------++------+
  8735.  
  8736.       The upper left portion of the color customization screen depicts  an
  8737.       example  of  the  screen  you  are customizing (in this case, a menu
  8738.       screen).  As you make changes, you will be able to  immediately  see
  8739.       their effect on this sample screen.
  8740.  
  8741.       The  lower  left portion of the color customization screen lists all
  8742.       those colors which are used by  the  current  sample.   Rather  than
  8743.       give  the  mnemonics for selecting the color (such as BASE), a brief
  8744.       description  is  shown  (e.g.,  Base  color).   An  indicator  arrow
  8745.       indicates which of these colors is currently being edited.
  8746.  
  8747.       Along  the  right  margin  of the color customization screen, the 16
  8748.       possible  foreground   components   and   16   possible   background
  8749.       components  of  a  color  code  attribute  byte  are  shown.  Arrows
  8750.       indicate the current foreground and  background  components  of  the
  8751.       selected color.
  8752.  
  8753.       To  modify  the color of a certain type of text, first use the arrow
  8754.       keys to select it and press ENTER.  For example, if  you  wanted  to
  8755.       customize  the  appearance  of  hot  keys,  you would press the down
  8756.       arrow once, moving the color selection indicator from Base color  to
  8757.       Hot keys, then press ENTER.
  8758.  
  8759.       When  you  press  enter,  a  prompt  appears along the bottom margin
  8760.       telling you to use arrows  to  set  the  foreground  and  background
  8761.       color, and ENTER to save the current setting.
  8762.  
  8763.       To  continue with our example, the default attribute used to display
  8764.       hot keys is a bright yellow foreground against a  black  background.
  8765.       (The  corresponding attribute value is hex 0E, because black has the
  8766.       value of 0, and bright yellow has the value of 15, or hex E).   When
  8767.       you  select  hot  keys,  the  arrow indicators show that the current
  8768.       foreground selection is  yellow  and  the  background  selection  is
  8769.       black.
  8770.  
  8771.       Chapter 15. The SYSOP Program                                    153
  8772.  
  8773.  
  8774.       Using  the  up and down arrows allows you alter the foreground value
  8775.       associated with hot keys.  Press up-arrow twice and  watch  the  hot
  8776.       keys  shown  on the screen change from bright yellow to bright cyan,
  8777.       then bright red.
  8778.  
  8779.       While in this color modification mode,  the  right  and  left  arrow
  8780.       keys   are   used   to  alternate  between  foreground  choices  and
  8781.       background choices.  Press the right arrow key  and  note  that  the
  8782.       blinking  marker  moves  from  the  foreground component (now bright
  8783.       red) to the background components listed to their  right  (currently
  8784.       black).   Now press the down arrow key and see the background of the
  8785.       hot keys change from black to blue, then green, and so  forth.   You
  8786.       can  press  left  arrow, make further adjustments to the foreground,
  8787.       and right arrow to experiment with the background, changing the  hot
  8788.       key   appearance   to  any  of  256  possible  foreground/background
  8789.       combinations.   When  the  appearance  of  hot  keys  is   to   your
  8790.       satisfaction, press ENTER (or ESC) to save the current setting.
  8791.  
  8792.       Note  that  whereas the last eight foreground colors are bright, the
  8793.       last eight background colors are blinking.  This  is  an  aspect  of
  8794.       the way color attribute bytes work.
  8795.  
  8796.       After  adjusting a specific type of text, you may return to the list
  8797.       of colors used by the current screen  sample  and  make  changes  to
  8798.       other  colors.   For  example, after adjusting the hot keys, you may
  8799.       want to make changes to the brackets around hot keys  so  they  have
  8800.       the  same  background  color.   Finally,  press ESC to return to the
  8801.       list of sample screens.  From here, pressing ESC  (or  X  for  eXit)
  8802.       will  remember the changes you have made.  Note that changes are not
  8803.       permanently recorded on disk until you exit the SYSOP program.
  8804.  
  8805.       If you decide that you have made colors worse, not better,  you  may
  8806.       press  'Q'  from  the  screen  selection  menu  and  discard all the
  8807.       changes that you have made.
  8808.  
  8809.  
  8810.       15.5 Chat groups
  8811.  
  8812.       As discussed in Chapter13, the  TSX-BBS  Chat  facility  is  divided
  8813.       into  discussion  groups.   In  order to be able to converse on-line
  8814.       with other users, you must first join a specific  discussion  group.
  8815.       Chat  groups  can be created by users who want to invoke discussions
  8816.       on a particular  topic,  such  as  computers.   These  user  defined
  8817.       groups disappear when the last user leaves the group.
  8818.  
  8819.       You  will  probably  find  that users are more encouraged to use the
  8820.       chat facility if permanent discussion groups have  been  created  by
  8821.       the  sysop.   These  permanent groups give new users an idea of what
  8822.       discussion groups are all  about,  and  make  some  suggestions  for
  8823.       topics  of  discussion.   In  addition  to topic centered discussion
  8824.       groups, you will probably want to create one or more  general  areas
  8825.       with names like "Chat lounge" or "Adult discussion".
  8826.  
  8827.       Definition  of  the  permanent  chat  discussion  groups  is done by
  8828.       selecting the chat groups option from the  SYSOP  main  menu.   When
  8829.  
  8830.       Chapter 15. The SYSOP Program                                    154
  8831.  
  8832.  
  8833.       you  do  this,  you  will  be placed in a field entry screen used to
  8834.       enter or modify the list of permanent discussion groups.
  8835.  
  8836.       To add a new discussion group, simply enter its name.  To remove  an
  8837.       existing  discussion  group,  use the DELETE key to completely erase
  8838.       its name.
  8839.  
  8840.       When you are finished modifying the permanent groups, you may  press
  8841.       ESC  to  save the changes, which will take effect immediately.  Note
  8842.       that if you delete a permanent group which is currently  in  use  it
  8843.       will not disappear until the last member has left it.
  8844.  
  8845.       If  you  decide  to  discard  the  changes you have made in the chat
  8846.       information screen, press F4.
  8847.  
  8848.  
  8849.       15.6 Paging Control
  8850.  
  8851.       TSX-BBS has the ability to allow users  to  "page"  the  sysop  when
  8852.       they  want  to  engage  in  an  on-line  conversation.  This type of
  8853.       conversation is a private, real-time exchange of  text  between  the
  8854.       sysop  and  an individual user.  It is not related to the BBS "chat"
  8855.       facility where multiple users exchange messages.
  8856.  
  8857.       When a user pages the sysop a message appears on the console  screen
  8858.       giving  the  time,  the  name of the user, and a message saying that
  8859.       the user is paging the sysop.  The bell is also rung  to  alert  the
  8860.       sysop  to  the  paging request.  TSX-BBS allows you to configure the
  8861.       paging system  so  that  it  is  disabled  completely,  enabled,  or
  8862.       enabled  and disabled automatically based on the time of day and day
  8863.       of the week.
  8864.  
  8865.       To control the paging, type 'P' to select "Paging control" from  the
  8866.       main  SYSOP menu.  You will then be presented with a screen that has
  8867.       one choice at the top and an array of day  and  time  based  choices
  8868.       below.   The  top  item  has  three  choices: "[E]nable paging until
  8869.       further  notice",  "[D]isable  paging  until  further  notice",  and
  8870.       "[S]cheduling  table controls paging".  If you type 'E', paging will
  8871.       be enabled until you return to  this  menu  item  and  make  another
  8872.       choice.   If you type 'D' paging is disabled.  If you type 'S', then
  8873.       paging is enabled and disabled automatically based on  the  day  and
  8874.       time as selected by the scheduling table.
  8875.  
  8876.       The  day/time  scheduling  table  has one entry for each hour of the
  8877.       day for the weekdays Monday through Friday and separate entries  for
  8878.       Saturday  and  Sunday.   If  you  set an entry to 'Y' then paging is
  8879.       enabled during that hour; if you  set  it  to  'N'  then  paging  is
  8880.       disabled during the hour.
  8881.  
  8882.       Paging  is always disabled when the sysop is logged off and when the
  8883.       sysop is running a graphics mode program on the console.
  8884.  
  8885.       When you receive a paging message from a user, you  can  engage  the
  8886.       user  in  a conversation by running the SYSOP program, selecting the
  8887.       "dashboard" display, highlighting the  entry  for  the  paging  user
  8888.  
  8889.       Chapter 15. The SYSOP Program                                    155
  8890.  
  8891.  
  8892.       (the  user's  activity  will  show as "Paging" in blinking red), and
  8893.       then typing 'C' to select the "Chat" function.  Press ESC  when  you
  8894.       wish  to  terminate  the  conversation.   Note  that  you  can  also
  8895.       initiate a sysop-to-user chat without waiting for  a  user  to  page
  8896.       you.
  8897.  
  8898.       The  paging  function is invoked by offering the users a menu choice
  8899.       whose  action  is  "pagesysop".   If  you  wish  to  disable  paging
  8900.       entirely  it  is  best  to simply not offer this option on any menu.
  8901.       The following is the example of  a  menu  "$item"  entry  to  invoke
  8902.       paging when the letter 'S' is typed:
  8903.  
  8904.       $item key=S action=pagesysop
  8905.  
  8906.  
  8907.       15.7 Handle Control
  8908.  
  8909.       A  "handle"  is  a  nickname  that  users may choose for themselves.
  8910.       Users may set handle names from the  User  Configuration  option  of
  8911.       the  main  BBS  menu.   TSX-BBS does not allow two users to have the
  8912.       same handle name.
  8913.  
  8914.       The sysop can disallow the use of handles altogether  or  can  allow
  8915.       handles  to  be  used in a limited set of circumstances.  To control
  8916.       handle usage, select the "Handle Control" option from the main  menu
  8917.       of  the  SYSOP  program.   You will then be presented with a list of
  8918.       entries.  You should enter 'Y' by an entry to enable handle  use  or
  8919.       'N'  to  disable  handle use.  If handle use is disabled, the user's
  8920.       real name is used for that situation.
  8921.  
  8922.  
  8923.       15.8 Language files
  8924.  
  8925.       15.8.1 Introduction
  8926.  
  8927.       Virtually all of the prompts, messages, and small menus used by  ISX
  8928.       are  stored  in a database file called a "Language Definition File",
  8929.       or "Phrase file".
  8930.  
  8931.       There are two reasons  that  this  data  is  not  encoded  into  the
  8932.       programs  of  TSX-BBS  itself.   The  first  is for foreign language
  8933.       support.  Storing the data in an external database allows the  SYSOP
  8934.       to  translate the text to any other language desired.  In fact, each
  8935.       authorized user can be assigned a different  language  file,  for  a
  8936.       truly multi lingual board.
  8937.  
  8938.       The  second  reason  that  the text data for TSX-BBS is stored in an
  8939.       external database is that  you  may  want  to  customize  or  adjust
  8940.       individual   phrases,   prompts,  and  menus  to  better  match  the
  8941.       personality of your board.
  8942.  
  8943.       There  are  actually  two  different  utilities  for  updating   the
  8944.       language  database.   One,  which  is  built  into the SYSOP control
  8945.       program, presents phrases one  at  a  time  for  on-screen  editing.
  8946.       This first method is discussed in this chapter.
  8947.  
  8948.       Chapter 15. The SYSOP Program                                    156
  8949.  
  8950.  
  8951.       You  should be aware that there is a second method which some SYSOPs
  8952.       may find better suited to complete translation from one language  to
  8953.       another.   Registered  users  may  download  the ASCII source of the
  8954.       entire language database, along with a program which  will  generate
  8955.       the  database  from  the  source  file.  This allows you to use your
  8956.       favorite editor and  other  utilities  to  aid  in  the  translation
  8957.       process.   For  more  information  about  the  external  source file
  8958.       approach, contact S&H.
  8959.  
  8960.       Adjustments to individual phrases and menus is  easily  accomplished
  8961.       using  the  "Language  File"  function  of  the SYSOP program.  When
  8962.       using SYSOP to edit a language database, the  entire  file  will  be
  8963.       read into memory, updated, and rewritten.
  8964.  
  8965.       15.8.2 Creating New Databases
  8966.  
  8967.       After  you  select  language  files  from  the  main menu, the SYSOP
  8968.       program presents you  with  a  browse  list  of  all  the  languages
  8969.       currently  defined  for  your board (it does this by looking for all
  8970.       the files in the ISX directory with the extension .LDF).
  8971.  
  8972.       Each of the files listed in this screen is a  phrase  file  database
  8973.       for  a  different  language.   ISX  is shipped with the database for
  8974.       english, ENGLISH.LDF.
  8975.  
  8976.       To create a new language file, use the Create option  in  the  SYSOP
  8977.       language  browse  screen.   You  will  be provided with a data entry
  8978.       screen similar to the following:
  8979.  
  8980.       +-------- Specify characteristics for new language file ---------+
  8981.       | Name of language file:  ________                               |
  8982.       | Name of file to copy:  ________                                |
  8983.       | Note about new file:  ___________________________________      |
  8984.       +---------------------- ESC=Exit, F4=Abort ----------------------+
  8985.  
  8986.       The name you specify is the name  of  the  .LDF  file  you  wish  to
  8987.       create.   You  should give a name which describes the language, such
  8988.       as GERMAN or SPANISH.
  8989.  
  8990.       If you specify a file to copy, an existing language file  is  copied
  8991.       as  a  template.   You  will  then  translate  each  phrase from the
  8992.       template language to the new language.  Specifying a  file  to  copy
  8993.       is  highly  recommended,  since otherwise you would have to re-enter
  8994.       every phrase by hand.
  8995.  
  8996.       The note you enter to describe the  new  file  will  appear  in  the
  8997.       language browse list, and is for your own clarification only.
  8998.  
  8999.       15.8.3 Assigning Languages to Users
  9000.  
  9001.       Using  the  user information screen, you assign each BBS user one of
  9002.       the available languages.  A pop-up menu  in  the  user  screen  will
  9003.       allow  you  to  select from existing language files.  By assigning a
  9004.       different phrase file to each authorized user, ISX can thus  present
  9005.       phrases, prompts, and menus in the each user's native language.
  9006.  
  9007.       Chapter 15. The SYSOP Program                                    157
  9008.  
  9009.  
  9010.       15.8.4 Editing Phrase Entries
  9011.  
  9012.       After  you  create  a  new language database, or to simply customize
  9013.       the text in an existing one, you must  access  and  edit  individual
  9014.       phrase entries, one at a time.
  9015.  
  9016.       Each  phrase  entry  corresponds to a prompt, phrase, or "mini-menu"
  9017.       provided by TSX-BBS.  Note that you may add  additional  entries  to
  9018.       the database and retrieve them in your own TPL programs as well.
  9019.  
  9020.       To  edit  an  individual  entry,  select the phrase file you wish to
  9021.       modify and type M or Enter.  This places you in  a  browse  list  of
  9022.       all  the  individual  phrases  and  menus  in the file.  This phrase
  9023.       browse screen will have the language being browsed shown at the  top
  9024.       border.   In the phrase browse you will use the arrow keys to select
  9025.       the entry you want to modify and press ENTER to edit it.
  9026.  
  9027.       The data entry screen  for  modifying  an  individual  phrase  looks
  9028.       similar to this:
  9029.  
  9030.       +-----------------------------------------------------------------+
  9031.       |                      Text displayed to user                     |
  9032.       | Password: ____________________________________________________  |
  9033.       | ______________________________________________________________  |
  9034.       | ______________________________________________________________  |
  9035.       |                                                                 |
  9036.       |                         Purpose of text                         |
  9037.       | Used to prompt a user for his password._______________________  |
  9038.       | ______________________________________________________________  |
  9039.       | ______________________________________________________________  |
  9040.       |                                                                 |
  9041.       | Mnemonic used by TPL:  PASSWORD                                 |
  9042.       | Brief description:     Prompt for password_______________       |
  9043.       |                                                                 |
  9044.       +------------------------ ESC=Exit, F4=Abort ---------------------+
  9045.  
  9046.       The  first  section of the data entry screen contains the text which
  9047.       is displayed to the user when the phrase or  menu  is  used  by  the
  9048.       system.   In  the  example  shown,  the phrase is used to prompt the
  9049.       user for a password.
  9050.  
  9051.       The second section, labelled "Purpose of text",  is  only  used  for
  9052.       the  benefit  of  the sysop who must maintain the text database.  If
  9053.       you are translating the text database to a different  language,  you
  9054.       are  welcome  to  translate  this  text  as well (for the benefit of
  9055.       SYSOPs who speak the language), but this text is never displayed  to
  9056.       a  BBS  user.   You  may  want  to  use this field to place notes to
  9057.       yourself regarding use of the phrase.
  9058.  
  9059.       The third field, labelled "Mnemonic used  by  TPL",  should  not  be
  9060.       altered.   This  field  is  used to generate a TPL header file which
  9061.       can be used by  TPL  and  C  programs  to  symbolically  access  the
  9062.       phrase.
  9063.  
  9064.       Chapter 15. The SYSOP Program                                    158
  9065.  
  9066.  
  9067.       The  "Brief  description"  field  is  the one line description which
  9068.       shows on the browse list  used  to  select  individual  phrases  for
  9069.       editing.  Again, this text is only for the benefit of the SYSOP.
  9070.  
  9071.       Once  you  have  completed  your changes to the phrase, press ESC to
  9072.       save the changes or F4 to discard them.
  9073.  
  9074.       Note that while you  edit  individual  phrases,  the  entire  phrase
  9075.       database  is only being modified in memory.  Only when you return to
  9076.       the phrase browse screen and type X (or ESC) to save  those  changes
  9077.       is  the entire phrase file rewritten to disk.  You may alter several
  9078.       phrases and still discard all changes by exiting the  phrase  browse
  9079.       by typing Q for quit.
  9080.  
  9081.       15.8.5 Mini Menus
  9082.  
  9083.       As  we mentioned, many of the entries in a language database provide
  9084.       the text for a "mini-menu".  Mini menus are  generally  one  or  two
  9085.       line  lists  of  choices given when browsing files, e-mail, messages
  9086.       in forums, and so on.  As an example, look at the full text  of  the
  9087.       mini menu used for the file library browse:
  9088.  
  9089.       N=D,P=U,Q=1,T=2,J=3,U=4,E=5,S=6,D=7
  9090.       `Next `Prev `Jump `Search `Extra `Tag `Upload `Down `Quit:
  9091.  
  9092.       The  first  line  of a mini menu must tell TSX-BBS what result codes
  9093.       are assigned to each key which the user can press.   Most  of  these
  9094.       codes  are  numeric values which are expected by the BBS engine when
  9095.       it invokes the mini menu.  In the example  shown,  the  engine  will
  9096.       perform  a  file upload operation if the returned code from the mini
  9097.       menu is 4, or quit the file browse if the value is  1.   These  code
  9098.       values  are  required  by  the  BBS engine and you should not change
  9099.       them.
  9100.  
  9101.       Note that the special code values D and U stand  for  down  and  up.
  9102.       They  tell the engine that the user does not want to make any choice
  9103.       yet, but wants to move up or down in the  list  of  items  (in  this
  9104.       case, files) being browsed.
  9105.  
  9106.       After  the  first  line of a mini-menu, all subsequent lines provide
  9107.       the text which is displayed to the user.  The  accent  character  is
  9108.       used  to  denote  the  "hot keys" which should be highlighted and in
  9109.       braces to tell the user what letters to type for each selection.
  9110.  
  9111.       When you translate a mini menu to a  different  language,  keep  the
  9112.       following rules in mind:
  9113.  
  9114.         . Be  sure  to  provide  the user a way to make all the selections
  9115.           which were possible in the original menu.
  9116.  
  9117.         . Be sure that each option in the list of  choices  has  a  unique
  9118.           hot key.
  9119.  
  9120.         . Be  sure  that  the  hot  key  letters  correspond to the return
  9121.           values the same way they did in the original menu.
  9122.  
  9123.       Chapter 15. The SYSOP Program                                    159
  9124.  
  9125.  
  9126.       Suppose, continuing with our example, that you are translating  this
  9127.       menu  to  french,  and  decide  to translate "Search" to "Chercher".
  9128.       After making this first change, the adjusted menu looks like this:
  9129.  
  9130.       N=D,P=U,Q=1,T=2,J=3,U=4,E=5,C=6,D=7
  9131.       `Next `Prev `Jump `Chercher `Extra `Tag `Upload `Down `Quit:
  9132.  
  9133.       Note that even after the translation, the return value  of  6  still
  9134.       means  "Search for a file", but the prompt reads "Chercher", and the
  9135.       hot key which invokes the return value 6 is now C instead of S.
  9136.  
  9137.       If you have difficulty finding a translation which gives every  word
  9138.       a  unique  first  letter, simply change the hot key to be some other
  9139.       letter  in  the  word.   If  you  decided  to  translate  "Next"  to
  9140.       "Contigu",  you  could  not  re-use C because it is already used for
  9141.       "Chercher", so you might decide to use the N in  Contigu  as  a  hot
  9142.       key:
  9143.  
  9144.       N=D,P=U,Q=1,T=2,J=3,U=4,E=5,C=6,D=7
  9145.       Co`ntigu `Prev `Jump `Chercher `Extra `Tag `Upload `Down `Quit:
  9146.  
  9147.  
  9148.       15.9 Mail Configuration
  9149.  
  9150.       The  SYSOP  program  is  used  to  set  up  message  bases  for each
  9151.       supported  mail  route,  and   to   enter   specific   configuration
  9152.       information to describe routes like Fidonet and Usenet.
  9153.  
  9154.       To   access   the  mail  configuration  menu,  type  'M'  for  "Mail
  9155.       Configuration" at the main SYSOP menu.  The mail configuration  menu
  9156.       has  one option for setting up message bases and one option for each
  9157.       supported message route such as Fidonet and Usenet.  Each  of  these
  9158.       options is now considered in turn.
  9159.  
  9160.       15.9.1 Managing message bases
  9161.  
  9162.       To  manage  the  message bases, type 'M' from the mail configuration
  9163.       menu to select "Message bases".  You  will  be  placed  in  a  field
  9164.       entry screen similar to the one shown below:
  9165.  
  9166.           +------------------ Mail Route Configuration ------------------+
  9167.           |          Name         ID  Database  Area        Access       |
  9168.           | --------------------  --  --------  -----  ----------------  |
  9169.           | Local mail__________  L   INMAIL__  1____  ________________  |
  9170.           | Fidonet_____________  F   FIDO____  3____  P12_____________  |
  9171.           | Usenet______________  U   USENET__  4____  ________________  |
  9172.           | ____________________  _   ________  _____  ________________  |
  9173.           | ____________________  _   ________  _____  ________________  |
  9174.           |                                                              |
  9175.           +---------------- F1=Help, ESC=Save, F4=Abort -----------------+
  9176.  
  9177.       Each  message  base  is  defined  by its name, a single ID letter, a
  9178.       database name, an  area  number,  and  an  optional  access  control
  9179.       expression.  Pop-up help for each field is available by typing F1.
  9180.  
  9181.       Chapter 15. The SYSOP Program                                    160
  9182.  
  9183.  
  9184.       After  you  set up a message base for a route, users will be able to
  9185.       send messages via that route.  If more than  one  route  is  defined
  9186.       (only   local   mail  is  automatically  defined  when  you  install
  9187.       TSX-BBS), users must select the message route from a menu each  time
  9188.       they  send  an  e-mail message.  The name you specify in the message
  9189.       base field entry screen is the name they  will  see  in  this  route
  9190.       selection  menu.   The  ID  letter  you define is the character they
  9191.       will type to select that route.
  9192.  
  9193.       The database name you specify is used to create a pair of  files  to
  9194.       hold  the message base.  In the example shown, local mail is held in
  9195.       a message base comprised of the files INMAIL.MLD and INMAIL.MLC.
  9196.  
  9197.       Area numbers are assigned by S&H since the TSX-BBS software finds  a
  9198.       message  base  by using the area number.  The following area numbers
  9199.       are currently assigned:
  9200.  
  9201.         . 1 -- Local mail.
  9202.  
  9203.         . 2 -- Internet mail.
  9204.  
  9205.         . 3 -- Fidonet.
  9206.  
  9207.         . 4 -- Usenet.
  9208.  
  9209.       Note that defining message bases in the data entry screen  does  not
  9210.       actually  create  the  files.  Message base files are created by the
  9211.       BBS engine the first time they are needed.
  9212.  
  9213.       15.9.2 Specifying Fidonet configuration
  9214.  
  9215.       Fidonet configuration is discussed in the  chapter  on  Fidonet,  in
  9216.       section 19.4.
  9217.  
  9218.       15.9.3 Specifying Usenset configuration
  9219.  
  9220.       To  enter  the  Usenet  configuration  screen, type 'U' for "Usenet"
  9221.       from the mail configuration menu.  This will place  you  in  a  data
  9222.       entry  screen used to specify various Usenet setup parameters.  Each
  9223.       field, which is described fully in the  Chapter  18,  has  a  pop-up
  9224.       help  menu  which  you  view  by  pressing  the F1 key while in that
  9225.       field.
  9226.  
  9227.       You may save your changes with ESC or cancel them with F4.
  9228.  
  9229.  
  9230.       15.10 Discussion Forum Setup and Control
  9231.  
  9232.       The SYSOP program is used to manage forums.  Many  of  the  concepts
  9233.       mentioned  here  are  described  in  Chapter 9.  An understanding of
  9234.       those concepts is essential in order to effectively  use  the  SYSOP
  9235.       program.
  9236.  
  9237.       From the various menus in the SYSOP program you can
  9238.  
  9239.       Chapter 15. The SYSOP Program                                    161
  9240.  
  9241.  
  9242.         . Create  a  forum.   Forums  can be created in one of two ways: A
  9243.           forum can be created by name, or an ascii file can  be  used  to
  9244.           import a set of names to be created.
  9245.  
  9246.         . Set access privileges for a forum.
  9247.  
  9248.         . Enable or disable autoadd privileges.
  9249.  
  9250.         . Delete  a  single  forum  or a category of forums or all forums.
  9251.           Forums can be deleted individually, hierarchically  (delete  all
  9252.           forums  under  a  specified  name),  or deleted by specifying an
  9253.           ASCII file which contains a list of forums to be deleted.
  9254.  
  9255.         . Erase all the messages in a single forum or  in  a  category  of
  9256.           forums.
  9257.  
  9258.         . Enable or disable log files or event log display.
  9259.  
  9260.         . Specify defaults for new forum creation.
  9261.  
  9262.         . Specify locations for forum control files.
  9263.  
  9264.         . Generate a list of current forums into an ascii file.
  9265.  
  9266.         . Regenerate user index files.
  9267.  
  9268.         . Rebuild the forum control file.
  9269.  
  9270.       The forums can be accessed in one of several ways, including
  9271.  
  9272.         . A hierarchical list.
  9273.  
  9274.         . An alphabetic list.
  9275.  
  9276.         . A list derived by searching for a name component.
  9277.  
  9278.         . By forum name.
  9279.  
  9280.         . By forum number.
  9281.  
  9282.       The  main  forum menu is selected from the main SYSOP menu by typing
  9283.       'O'.
  9284.  
  9285.       15.10.1 Defining the Locations of Forum Control Files
  9286.  
  9287.       Before creating any forums the locations of the control  files  must
  9288.       be   specified.    The   default   location   of   these   files  is
  9289.       "BBS:\FORUM\".  If there are a small number of forums  or  there  is
  9290.       not much anticipated space required for forums this should suffice.
  9291.  
  9292.       From  the  main  menu  type 'H' to select "Housekeeping".  Then type
  9293.       'O' for "Organization of forums".  This  will  display  the  current
  9294.       default  and a set of lines which allow the sysop to select the base
  9295.       directory of a range of forums.
  9296.  
  9297.       Chapter 15. The SYSOP Program                                    162
  9298.  
  9299.  
  9300.       In addition to changing the default location, forums  can  be  split
  9301.       into  up  to 64 different directories according to the forum number.
  9302.       Each base  directory  can  hold  up  to  1000  forums.   It  is  not
  9303.       necessary   to  specify  a  directory  for  each  range  of  forums.
  9304.       Wherever the directory is blank it will pick up  the  default  value
  9305.       specified at the top.
  9306.  
  9307.       15.10.2 The Hierarchical, Alphabetic, and Search displays
  9308.  
  9309.       There  are  several ways to view and manage the set of forums.  Each
  9310.       of these display methods allows for various operations once  a  list
  9311.       of  forums  is  displayed.   These  menus and how to navigate within
  9312.       them are discussed here, and then referred to  when  describing  the
  9313.       various functions.
  9314.  
  9315.       From  the main forum typing 'M' will select the "Modify and display"
  9316.       submenu.  From this menu there are  three  ways  that  the  list  of
  9317.       forums  can  be displayed: hierarchically (type 'H'), alphabetically
  9318.       (type 'A'), and via a keyword search (type 'S').
  9319.  
  9320.       Each of the menus has a list of items which is  appropriate  to  the
  9321.       type  of  display.  On each screen 'N' will advance to the next page
  9322.       and 'P' will go to the previous page.  In each screen  there  are  a
  9323.       set  of  action  keys  whose values and meaning are specified to the
  9324.       right of the display.  Each will  be  discussed  in  discussing  the
  9325.       display type.
  9326.  
  9327.       In  order  to  perform  a  function specified by the action keys one
  9328.       entry must be highlighted.  Typing the action key will then  perform
  9329.       the  specified action.  The first entry on the screen is highlighted
  9330.       when the screens are entered or when a new page  is  selected.   The
  9331.       up  and down arrow keys go up and down within the screen, moving the
  9332.       highlighted bar and changing the selected item.
  9333.  
  9334.       15.10.2.1 The Hierarchical Display
  9335.  
  9336.       Typing  'H'  from  the  "Modify  and  display"  menu   selects   the
  9337.       hierarchical  display.   Forum  names have a hierarchical structure.
  9338.       At the topmost level there is the grand division  such  as  "usenet"
  9339.       and  "fido",  which  is  discussed  in Section 9.5.  At levels under
  9340.       that there may be other levels which may contain other levels.
  9341.  
  9342.       The name "usenet.alt.cooking.chili", for  instance,  has  4  levels,
  9343.       one for each name component.
  9344.  
  9345.       Viewing  the  list of forums via the hierarchical display is akin to
  9346.       taking a directory under DOS: it  only  shows  the  entries  at  the
  9347.       current  level.   Under DOS you must use the "cd" command to go "up"
  9348.       or "down"; in this display you use "G" or the right arrow key to  go
  9349.       down  to the next lower level and "U" or the left arrow key to go up
  9350.       the the next higher level.
  9351.  
  9352.       In our example "usenet" is the only  item  at  the  top  level.   In
  9353.       order  to  perform a function on an item it must be selected.  Items
  9354.       are selected using the arrow keys.  When a  screen  first  displays,
  9355.  
  9356.       Chapter 15. The SYSOP Program                                    163
  9357.  
  9358.  
  9359.       or  when  next  or  previous  pages  are  selected  via  'N' or 'P',
  9360.       respectively, the first item is selected.  An  item  is  highlighted
  9361.       when  it  is  selected.   If "usenet" is the only item it is already
  9362.       selected so we can choose an action from the "Action keys"  menu  at
  9363.       the right.
  9364.  
  9365.       If  we  select  'G'  to go to the next level the screen will display
  9366.       the single item "alt", since "alt" is the level below "usenet".   If
  9367.       there  were additional forums below the "usenet" grand division, all
  9368.       of the second level names would be displayed here.
  9369.  
  9370.       We can type 'G' again and see the  single  item  'cooking'.   Typing
  9371.       'G'  one  last  time  and we see the item "chili".  This entry has a
  9372.       forum number and message count displayed with it indicating that  it
  9373.       is a forum containing messages.
  9374.  
  9375.       In  DOS  you  can  have  directories and non-directories at the same
  9376.       level.  In a like manner, there can be forum and non-forum names  at
  9377.       the  same  level.  The name "usenet" by itself is not a forum but is
  9378.       a valid non-forum name analogous to a directory.   If  there  was  a
  9379.       forum  at the same level as "usenet" its display would look slightly
  9380.       different.  The forum number would display and  the  current  number
  9381.       of  messages  in the forum would display as well.  It is not unusual
  9382.       for there to be forums and non-forums at the same level with  usenet
  9383.       newsgroups.
  9384.  
  9385.       The following action keys apply to the hierarchical display:
  9386.  
  9387.       'G'  --  "Go  into forum".  If there are name components beneath the
  9388.           current name this will display a screen with all  the  names  at
  9389.           that  level.   If  there are no names beneath the current one it
  9390.           does nothing.
  9391.  
  9392.       'H' -- "Higher level".   This  will  display  the  names  above  the
  9393.           current  level.   If there are no names above the current one it
  9394.           does nothing.
  9395.  
  9396.       'A' -- "Add forum".  This will  bring  up  the  "Create  new  forum"
  9397.           screen  and  allow  a  forum to be created at the current level.
  9398.           The "Create new forum" screen is discussed in Section 15.10.3.
  9399.  
  9400.       'D' -- "Delete forum".  This will allow  deletion  of  the  selected
  9401.           forum.   If  the  name  selected  has  forums beneath it it will
  9402.           delete those as well.  This is called a  "recursive"  operation.
  9403.           The  implications  are  that  if  you  delete  the  names at the
  9404.           topmost level you will delete all  the  forums  in  the  system.
  9405.           This  option  should  be  used  with care.  The number of forums
  9406.           beneath the current forum are counted and you will  be  prompted
  9407.           to confirm the request.
  9408.  
  9409.       'M'  --  "Modify  forum".  This allows modification of the privilege
  9410.           and options for the name component through the  "Inspect  forum"
  9411.           screen.  This screen is discussed in Section 15.10.4.
  9412.  
  9413.       Chapter 15. The SYSOP Program                                    164
  9414.  
  9415.  
  9416.       'I'  --  "Initialize  forum".  To initialize a forum means to delete
  9417.           all its messages and reset the message counter to 1.  The  forum
  9418.           itself  is not deleted, however.  Choosing this action this will
  9419.           initialize the selected forum.  If there are  forums  under  the
  9420.           selected  one  they will be initialized as well.  This is called
  9421.           a "recursive" operation.   The  implications  are  that  if  you
  9422.           initialize  the  names  at the topmost level you will initialize
  9423.           all the forums in the system.  This option should be  used  with
  9424.           care.   The  number  of  forums  beneath  the  current forum are
  9425.           counted and you will be prompted to confirm the request.
  9426.  
  9427.       'N' -- "Next page".  This will advance to the next page of items  at
  9428.           this level, if there are any.
  9429.  
  9430.       'P'  --  "Prev page".  This will go to the previous page of items at
  9431.           this level, if there are any.
  9432.  
  9433.       'X' -- "Exit".  This will exit this  display,  no  matter  what  the
  9434.           current nesting level is.
  9435.  
  9436.       The  main  advantage  of  the hierarchical display is the ability to
  9437.       get a better sense of the overall organization of  the  forum  names
  9438.       and  also  the  ability  to  modify  a name component which is not a
  9439.       forum.
  9440.  
  9441.       15.10.2.2 The Alphabetic and Search Displays
  9442.  
  9443.       The Alphabetic display and  the  Search  display  are  identical  in
  9444.       terms  of  functionality  and  display.  They both show the selected
  9445.       forums in alphabetical order.   The  only  difference  is  how  they
  9446.       select forums for display.
  9447.  
  9448.       Typing   'A'   from  the  "Modify  and  display"  menu  selects  the
  9449.       Alphabetic display.  After typing 'A' there is a prompt  which  asks
  9450.       for  a prefix.  This is just the first part of the name to subset by
  9451.       and provides an easy means to examine a subset of the  forums  which
  9452.       all  start with a certain string.  Just typing return will result in
  9453.       all the forums being selected.  For example, if you were  supporting
  9454.       Usenet  and  Fido forums and wanted to work on only the Fido forums,
  9455.       you could enter "usenet" when prompted for the prefix.
  9456.  
  9457.       Typing 'S' from the "Modify and display"  menu  selects  the  Search
  9458.       display.   After  typing  'S'  there  is  a  prompt which asks for a
  9459.       search string.  This is a string which will  be  compared  with  all
  9460.       forum  names.   Those  which contain the string will be selected for
  9461.       display Typing return will terminate the display.
  9462.  
  9463.       The distinction between selecting a prefix and specifying  a  search
  9464.       string  is  that  the  prefix  must match only the first part of the
  9465.       name.  A prefix of "usenet"  would  match  "usenet.alt.cooking"  but
  9466.       would  not  match the string "fido.culture.usenet".  A search string
  9467.       of   "usenet"   would   match    both    "usenet.alt.cooking"    and
  9468.       "fido.culture.usenet".
  9469.  
  9470.       Chapter 15. The SYSOP Program                                    165
  9471.  
  9472.  
  9473.       These  will  display  all  the  selected  forums  on  the  system in
  9474.       alphabetical order.
  9475.  
  9476.       The action keys on these menues are:
  9477.  
  9478.       'N' -- "Next page".  This will advance to the next page of items  at
  9479.           this level, if there are any.
  9480.  
  9481.       'P'  --  "Prev page".  This will go to the previous page of items at
  9482.           this level, if there are any.
  9483.  
  9484.       'X' -- "Exit".  This will exit this  display,  no  matter  what  the
  9485.           current nesting level is.
  9486.  
  9487.       'A'  --  "Add  forum".   This  will  bring up the "Create new forum"
  9488.           screen and allow a forum to be created.  The "Create new  forum"
  9489.           screen is discussed in Section 15.10.3.
  9490.  
  9491.       'D'  --  "Delete  forum".   This will allow deletion of the selected
  9492.           forum.  You will be prompted for confirmation of this request.
  9493.  
  9494.       'M' -- "Modify forum".  This allows modification  of  the  privilege
  9495.           and  autoadd  options  for the forum through the "Inspect forum"
  9496.           screen.  This screen is discussed in Section 15.10.4.
  9497.  
  9498.       'I' -- "Initialize forum".  To initialize a forum  means  to  delete
  9499.           all  its messages and reset the message counter to 1.  The forum
  9500.           itself is not deleted, however.  Choosing this action this  will
  9501.           initialize  the  selected  forum.   You  will  be  prompted  for
  9502.           confirmation of this request.
  9503.  
  9504.       Unlike the hierarchical  display,  all  the  items  display  in  the
  9505.       Alphabetical  and  Search  lists  are  forums, so all the items will
  9506.       display a forum number and a number of messages.
  9507.  
  9508.       15.10.3 Creating New Forums
  9509.  
  9510.       New forums can be created in one of  three  ways.   In  two  of  the
  9511.       cases  the  same  screen  is  used  to  define  a forum: "Create new
  9512.       forum".
  9513.  
  9514.       When the "Create new forum" screen is used to create  a  forum  only
  9515.       the  forum  name  is  required.  Fill in the complete name including
  9516.       the grand division such  as  "usenet"  or  "fido";  use  periods  to
  9517.       separate  name  components.   Spaces within the name are not allowed
  9518.       but most other punctuation characters such as dashes and  underlines
  9519.       are allowed.
  9520.  
  9521.       The  use  of  the  comment  field  is  optional.   Its value is only
  9522.       displayed within the  SYSOP  program.   If  desired,  privilege  and
  9523.       autoadd  information  may  be  specified  at  this  time  or  may be
  9524.       modified later.  If  you  specify  a  complex  name,  one  involving
  9525.       several  name  components  separated  by  periods, the SYSOP program
  9526.       will  create  entries  for  each  part  of  the   name.    Privilege
  9527.  
  9528.       Chapter 15. The SYSOP Program                                    166
  9529.  
  9530.  
  9531.       information  will  be  null  and  autoadd  will be set to 'Y' on the
  9532.       other name components.
  9533.  
  9534.       Privilege strings are specified as  the  read,  write,  and  control
  9535.       privilege.   The  privilege  expressions  are  evaluated at the time
  9536.       they are needed.  For example, when displaying the  list  of  forums
  9537.       to  a  user  the  read  privilege  is  used  to determine whether to
  9538.       include a forum or not.  When a user  tries  to  post  to  a  forum,
  9539.       either  interactively or through QWK, the write privilege expression
  9540.       is evaluated.   The  control  privilege  is  evaluate  when  a  user
  9541.       attempts  to  delete a message.  See Chapter 4 for information about
  9542.       how to specify privilege expressions.
  9543.  
  9544.       The number of days until expiration is how many  days  messages  are
  9545.       allowed to remain in the forum until the sweeper deletes them.
  9546.  
  9547.       The  maximum  number of messages is just that; the maximum number of
  9548.       messages to allow  in  the  forum  before  the  sweeper  will  begin
  9549.       deleting  messages.  Enough messages are deleted to bring the number
  9550.       down to the maximum.
  9551.  
  9552.       The minimum number of messages is not meaningful unless there  is  a
  9553.       number  of  days  specified.   Since  the minimum number of messages
  9554.       must necessarily be less than the  maximum  and  since  the  sweeper
  9555.       will  only  reduce  the  message  count  to  the maximum the minumum
  9556.       number of messages is used in conjunction with the number of days.
  9557.  
  9558.       If deleting expired messages would reduce the number of messages  to
  9559.       below  the minimum then enough expired messages are left to keep the
  9560.       specified minimum number of messages.
  9561.  
  9562.       When user's peruse the forums the highest  message  that  they  have
  9563.       read  can  be  maintained  for  them  and  is by default.  If 'N' is
  9564.       specified here then users  will  always  see  all  messages  in  the
  9565.       forum.   This  can  be  useful  for  forums  which contain reference
  9566.       items.
  9567.  
  9568.       The  expiration  parameters  number  of  days,  maximum  number   of
  9569.       messages,  and  minimum  number  of messages can be specified either
  9570.       here or specified to the sweeper when it runs.   In  order  for  the
  9571.       sweeper  to  delete  messages based on these parameters they must be
  9572.       specified; there are no system wide defaults.
  9573.  
  9574.       To create new forums, select one of the following methods.
  9575.  
  9576.       1.  From the main forum menu type  'C'  to  select  "Create".   From
  9577.           there  type  'C'  to  select "Create forum".  This will bring up
  9578.           the "Create new forum" screen.
  9579.  
  9580.       2.  From the Hierarchical, Alphabetic, and  Search  lists  described
  9581.           in Section 15.10.2 type 'A'.
  9582.  
  9583.       3.  Using  a  text  editor,  create  a  list  of  forum  names to be
  9584.           created.  The form of the list is one name per line, no  leading
  9585.           or  trailing  spaces  and  CR/LF  terminated records.  Here is a
  9586.  
  9587.       Chapter 15. The SYSOP Program                                    167
  9588.  
  9589.  
  9590.           short sample  list  showing  additions  to  the  grand  division
  9591.           "usenet".
  9592.  
  9593.               usenet.alt.chinese.text
  9594.               usenet.alt.college.college-bowl
  9595.               usenet.alt.comp.databases.xbase.clipper
  9596.               usenet.alt.education.distance
  9597.               usenet.alt.fan.piers-anthony
  9598.               usenet.alt.fishing
  9599.               usenet.alt.games.doom
  9600.               usenet.alt.good.morning
  9601.  
  9602.           To  import  a  list of forum names to create from the main forum
  9603.           menu type 'C' to select  "Create".   Then  type  'I'  to  select
  9604.           "Import  forum  list".   This  will  prompt  for the name of the
  9605.           file.  Specify the name of the file.   SYSOP  will  then  report
  9606.           the creation of each forum as it does it.
  9607.  
  9608.       15.10.4 Modifying Forum Privileges and Attributes
  9609.  
  9610.       A  forum  name  is  composed  of pieces called name components.  For
  9611.       example, a single forum called "alt.cooking.chili"  has  three  name
  9612.       components;   "alt",   "cooking",  and  "chili".   Each  forum  name
  9613.       component has privilege and  autoadd  attributes  and  each  can  be
  9614.       modified  via SYSOP.  Privileges and forums are discussed in Section
  9615.       9.6.  Autoadd functionality and  forums  are  discussed  in  Section
  9616.       9.7.
  9617.  
  9618.       The  "Inspect  forum"  screen  is  used to modify privileges and the
  9619.       autoadd attribute.  It displays the name  component.   If  the  name
  9620.       component  is  also  a  forum  it  will  information about the forum
  9621.       including name, number, and location of control files.  This  screen
  9622.       allows    modification   of   privileges,   expiration   parameters,
  9623.       maintenance of the high watermark, and of the  autoadd  capabilities
  9624.       at this node.
  9625.  
  9626.       The  number  of  days until expiration is how many days messages are
  9627.       allowed to remain in the forum until the sweeper deletes them.
  9628.  
  9629.       The maximum number of messages is just that; the maximum  number  of
  9630.       messages  to  allow  in  the  forum  before  the  sweeper will begin
  9631.       deleting messages.  Enough messages are deleted to bring the  number
  9632.       down to the maximum.
  9633.  
  9634.       The  minimum  number of messages is not meaningful unless there is a
  9635.       number of days specified.  Since  the  minimum  number  of  messages
  9636.       must  necessarily  be  less  than  the maximum and since the sweeper
  9637.       will only reduce the  message  count  to  the  maximum  the  minumum
  9638.       number of messages is used in conjunction with the number of days.
  9639.  
  9640.       If  deleting expired messages would reduce the number of messages to
  9641.       below the minimum then enough expired messages are left to keep  the
  9642.       specified minimum number of messages.
  9643.  
  9644.       Chapter 15. The SYSOP Program                                    168
  9645.  
  9646.  
  9647.       When  user's  peruse  the  forums the highest message that they have
  9648.       read can be maintained for them  and  is  by  default.   If  'N'  is
  9649.       specified  here  then  users  will  always  see  all messages in the
  9650.       forum.  This can  be  useful  for  forums  which  contain  reference
  9651.       items.
  9652.  
  9653.       The   expiration  parameters  number  of  days,  maximum  number  of
  9654.       messages, and minimum number of messages  can  be  specified  either
  9655.       here  or  specified  to  the sweeper when it runs.  In order for the
  9656.       sweeper to delete messages based on these parameters  they  must  be
  9657.       specified; there are no system wide defaults.
  9658.  
  9659.       This screen can be called up in one of several ways.
  9660.  
  9661.       1.  Accessing  by name The simplest way to gain access to forum name
  9662.           component attributes is by typing 'M' on the main forum menu  to
  9663.           select  "Modify  and  display"  'N'  to select "Name component".
  9664.           Type in the name component.   There  is  information  associated
  9665.           with  each  name component so it is legal to specify only a part
  9666.           of a forum name.  This will display the "Forum list" menu  which
  9667.           will  have  several  options.  To modify attributes type 'M' for
  9668.           "Modify forum".  This will call up the "Inspect  forum"  screen.
  9669.           This  method  is  useful for accessing name components which are
  9670.           not forums per se but are  parts  of  other  forum  names.   For
  9671.           instance,  if there is one forum called "alt.cooking.chili" this
  9672.           method can be used to access each of the three name  components;
  9673.           "alt",  "alt.cooking",  and  "alt.cooking.chili".  Each can have
  9674.           privileges and autoadd attributes that can be modified.
  9675.  
  9676.       2.  Accessing  by  number.   This  method  can  be  used  to  modify
  9677.           attributes  of  a forum using the forum number.  Type 'M' on the
  9678.           main forum menu to select "Modify and display" and then  'F'  to
  9679.           select  "Forum number".  By then specifying the forum number the
  9680.           "Inspect forum" screen will be called up with the attributes  of
  9681.           the  forum.   Note  that  this method cannot be used to refer to
  9682.           name components other than the ones associated  with  an  actual
  9683.           forum  since  only name components associated with forums have a
  9684.           number associated with them.
  9685.  
  9686.       3.  From the Hierarchical, Alphabetic, and Search lists.  These  are
  9687.           described  in  Section  15.10.2.  In each, the action key 'M' to
  9688.           "Modify forum" will invoke the "Inspect forum" screen.
  9689.  
  9690.       15.10.5 Deleting a Forum
  9691.  
  9692.       When a forum is deleted  all  messages  are  erased  and  the  forum
  9693.       control files are deleted.
  9694.  
  9695.       There  are different types of forum deletion, from deleting a single
  9696.       forum to deleting a set of forums to deleting all forums.
  9697.  
  9698.       1.  Deleting a single forum.  A single forum  can  be  deleted  from
  9699.           the  Hierarchical,  Alphabetic,  and  Search  lists.   These are
  9700.           described in Section 15.10.2.  In each, the action  key  'D'  to
  9701.           "Delete  forum"  will  delete  the  forum.   To  delete a forum,
  9702.  
  9703.       Chapter 15. The SYSOP Program                                    169
  9704.  
  9705.  
  9706.           select one of the three types of displays.  Select the forum  to
  9707.           be  deleted  by highlighting it with the arrow keys.  Then, type
  9708.           'D'  to  delete  the  forum.    You   will   be   prompted   for
  9709.           confirmation.
  9710.  
  9711.       2.  Deleting  a  set  of forums with common name components.  In the
  9712.           Hierarchical  forum  list,  described  in  Section  15.10.2,  an
  9713.           attempt  to  delete  an  item will result in the deletion of all
  9714.           items under a particular name.  If there  are  20  forums  which
  9715.           begin  with  the  name "usenet.alt.cooking" and the hierarchical
  9716.           display is positioned at the "cooking" name  component  and  the
  9717.           'D'  to  "Delete forum" action is selected it will delete all 20
  9718.           forums.  Because of this, deletions from the  hierarchical  menu
  9719.           are more powerful and should be approached cautiously.
  9720.  
  9721.       3.  Deleting  a  set  of  named forums imported from a file.  It can
  9722.           occasionally be useful to delete a set of forums  by  name.   If
  9723.           new  forum  creation is enabled then the tossers will create new
  9724.           forums and writing entries to the file  BBS:FNEW.LOG.   This  is
  9725.           discussed  in  Section  9.7.   If  this  file  is  appropriately
  9726.           modified it can be used as input for deletion.
  9727.  
  9728.           From the main forum menu typing 'D' will select the "Delete  and
  9729.           reset"  menu.   From  here  typing 'I' to select "Import list to
  9730.           delete" will allow the sysop to specify the  name  of  an  ascii
  9731.           file which contains a list of forums to be deleted.
  9732.  
  9733.           The  form  of  the  list  is  one  name  per line, no leading or
  9734.           trailing spaces and CR/LF terminated records.  Here is  a  short
  9735.           sample  list  showing  deletions  from  to  the  grand  division
  9736.           "usenet".
  9737.  
  9738.               usenet.alt.chinese.text
  9739.               usenet.alt.college.college-bowl
  9740.               usenet.alt.comp.databases.xbase.clipper
  9741.               usenet.alt.education.distance
  9742.               usenet.alt.fan.piers-anthony
  9743.               usenet.alt.fishing
  9744.               usenet.alt.games.doom
  9745.               usenet.alt.good.morning
  9746.  
  9747.       4.  Deleting all  forums.   There  are  occasions  when  it  may  be
  9748.           necessary  to delete all forums.  While this is a rather drastic
  9749.           action it is occasionally useful.   From  the  main  forum  menu
  9750.           typing  'D'  will select the "Delete and reset" menu.  From here
  9751.           typing 'D'  to  select  "Delete  all  forums"  will  delete  all
  9752.           forums.   Given  the  irrevocable  and global nature of this act
  9753.           the sysop is prompted twice  for  confirmation.   If  there  are
  9754.           many forums this operation may take a while.
  9755.  
  9756.       15.10.6 Erasing All Messages from a Forum
  9757.  
  9758.       The   sysop  can,  from  TSX-BBS,  delete  messages  from  a  forum.
  9759.       However, if there are hundreds of messages and the  sysop  wants  to
  9760.       delete all the messages it would take some time to do this.
  9761.  
  9762.       Chapter 15. The SYSOP Program                                    170
  9763.  
  9764.  
  9765.       The  sysop can, from SYSOP, delete all messages from a forum without
  9766.       deleting the forum itself.   This  is  called  "Initializing".   The
  9767.       SYSOP  can  initialize a single forum, a set of forums with a common
  9768.       name, and all messages in all forums.
  9769.  
  9770.         . Initializing a single forum.  A single forum can be  initialized
  9771.           from  the Hierarchical, Alphabetic, and Search lists.  These are
  9772.           described in Section 15.10.2.  In each, the action  key  'I'  to
  9773.           "Initialize"  will initialize the forum.  To initialize a forum,
  9774.           select one of the three types of displays.  Select the forum  to
  9775.           be  deleted  by highlighting it with the arrow keys.  Then, type
  9776.           'I'  to  initialize  the  forum.   You  will  be  prompted   for
  9777.           confirmation.
  9778.  
  9779.         . Initializing  a  set  of forums with common name components.  In
  9780.           the Hierarchical forum list, described in  Section  15.10.2,  an
  9781.           attempt  to initialize an item will result in the initialization
  9782.           of all items under a particular name.  If there  are  20  forums
  9783.           which   begin   with  the  name  "usenet.alt.cooking",  and  the
  9784.           hierarchical  display  is  positioned  at  the  "cooking"   name
  9785.           component,  and  the  'I' to "Initialize" action is selected, it
  9786.           will   initialize   all   20   forums.    Because    of    this,
  9787.           initializations  from  the  hierarchical  menu are more powerful
  9788.           and should be approached cautiously.
  9789.  
  9790.         . Initializing all forums.  There are occasions  when  it  may  be
  9791.           necessary  to  initialize  all  the forums.  From the main forum
  9792.           menu typing 'D' will select the "Delete and reset"  menu.   From
  9793.           here  typing  'E' to select "Erase all messages" will Initialize
  9794.           all forums.  The sysop is prompted for confirmation.   If  there
  9795.           are many forums this operation may take a while.
  9796.  
  9797.       15.10.7 Miscellaneous Forum Functions
  9798.  
  9799.       This   section   describes  various  specialized  functions.   These
  9800.       functions are apt to be less used.
  9801.  
  9802.       15.10.7.1 Specifying New Forum Defaults Privileges
  9803.  
  9804.       In Section 9.7.1 we discussed how tossers  can  create  new  forums.
  9805.       When  new  forums  are  created  they  may  have  initial privileges
  9806.       associated with them.  The main reason for doing this is to  prevent
  9807.       users  from seeing new forums created by tossers until the sysop has
  9808.       reviewed them.
  9809.  
  9810.       From the main menu type 'H' to  select  "Housekeeping".   Then  type
  9811.       'N'  for "New forum defaults".  The default read, write, and control
  9812.       privilege for new forums created by tossers can be specified here.
  9813.  
  9814.       This screen only affects forums created by tossers;  forums  created
  9815.       interactively have privileges specified at the time of creation.
  9816.  
  9817.       Chapter 15. The SYSOP Program                                    171
  9818.  
  9819.  
  9820.       15.10.7.2 Options for Classified Ads
  9821.  
  9822.       In  Section  9.10  we  discussed  classified  ads  in  TSX-BBS.   In
  9823.       TSX-BBS,  classifieds  are  regular  forums  with  a  special  grand
  9824.       division  name.   Classifieds  have one other specialized attribute:
  9825.       the number of days before expiring messages.
  9826.  
  9827.       To specify the classified defaults the main forum menu type  'H'  to
  9828.       select  "Housekeeping".   Then type 'G' for "General forum options".
  9829.       This screen contains several  unrelated  items.   The  name  of  the
  9830.       classified  grand  division  and the number of days to expire are in
  9831.       the section titled "Classified Options".
  9832.  
  9833.       15.10.7.3 Log File Options
  9834.  
  9835.       Log files were discussed in Section 9.9 and are named  BBS:Fxxxx.LOG
  9836.       where  "xxxx" is one of the words REJECT, STAT, NEW, ERROR, SUMMARY,
  9837.       and SWEEP.  The log files can be  selectively  enabled  or  disabled
  9838.       with  this screen.  Enabling the log files allows them to be created
  9839.       and appended to.  The log files can be deleted at  any  time.   They
  9840.       are recreated if the option is enabled and if they are required.
  9841.  
  9842.       From  the  main  menu  type 'H' to select "Housekeeping".  Then type
  9843.       'L' for "Log file options".  Selecting 'Y' or  'N'  will  enable  or
  9844.       disable,  respectively,  writing to the log files.  If the log files
  9845.       are currently active, records will stop accruing to them.
  9846.  
  9847.       15.10.7.4 Displaying the Forum Event Log
  9848.  
  9849.       From the main menu type 'H' to  select  "Housekeeping".   Then  type
  9850.       'D'  for "Display event log".  This will display the contents of the
  9851.       FBATCH event log.  As new records are added to it  it  will  scroll.
  9852.       This reports all activity from the tossers and sweeper.
  9853.  
  9854.       15.10.7.5 Reset Log Files and Event Log
  9855.  
  9856.       From  the  main  menu  type 'H' to select "Housekeeping".  Then type
  9857.       'R'  for  "Reset  event  logs".   This  will  delete  all   of   the
  9858.       BBS:Fxxxx.LOG  files  and  reset the FBATCH event log.  Perform this
  9859.       function if it becomes necessary to clear out log files.   This  can
  9860.       be  done  at  any  time  and  is  a useful way to start with a clean
  9861.       state.
  9862.  
  9863.       15.10.7.6 Creating the User Index Files
  9864.  
  9865.       The user index files were discussed in Section 9.8.3.  They  contain
  9866.       the  files used by TSX-BBS to help users find forum data.  They must
  9867.       be  updated  if  new  forums  are  added.   They   are   regenerated
  9868.       automatically  by  tossers  if  the tossers create new forums.  When
  9869.       the SYSOP program is used to create or delete forums it will  prompt
  9870.       the  sysop  to  regenerate  the  files  when exiting from SYSOP.  In
  9871.       general, there will not be a need to manually  update  the  indices,
  9872.       although   there   are   scenarios  where  it  could  be  necessary.
  9873.       Regeneration may occur at any time, even while users are logged on.
  9874.  
  9875.       Chapter 15. The SYSOP Program                                    172
  9876.  
  9877.  
  9878.       From the main menu type 'H' to  select  "Housekeeping".   Then  type
  9879.       'M'  for  "Make user access files".  Respond 'Y' to the confirmation
  9880.       to regenerate the files.
  9881.  
  9882.       15.10.7.7 Exporting a List of the Forum Names
  9883.  
  9884.       A useful tool for the sysop can be an ASCII  file  with  the  names,
  9885.       forum  numbers, and message counts of all the forums.  This function
  9886.       will generate that information into a named file.  This can be  done
  9887.       at any time.
  9888.  
  9889.       From  the  main  menu  type 'H' to select "Housekeeping".  Then type
  9890.       'E' for "Export forum list".  Provide a file name for the output.
  9891.  
  9892.       15.10.7.8 Rebuilding the Main Control Files
  9893.  
  9894.       This function should  only  be  used  with  direction  of  technical
  9895.       support.   It  rebuilds  the  BBS:FTREE.DAT file from information in
  9896.       each forum control file.  This is a safeguard function which  should
  9897.       only   be  needed  in  the  unlikely  event  of  corruption  of  the
  9898.       BBS:FTREE.DAT file.
  9899.  
  9900.       Warning: If this function  is  executed  all  privilege  information
  9901.       associated with forums is lost and will have to be re-constructed.
  9902.  
  9903.       From  the  main menu type 'C' to select "Create".  Then type 'B' for
  9904.       "Build from ctl files".  After confirmation this will  proceed  with
  9905.       the rebuild.
  9906.  
  9907.       15.10.7.9 Resetting All Privileges
  9908.  
  9909.       This  function  clears  all  privilege  information  associated with
  9910.       forums.  After this is done access to  forums  is  restored  to  the
  9911.       default;  all  forums  are  readable and writable by users and users
  9912.       can delete messages that they had previously posted.
  9913.  
  9914.       This function should only be used if the  sysop  wishes  to  have  a
  9915.       clean  slate  with  respect  to  privilege  information.   It can be
  9916.       executed at any time.  After  the  next  regeneration  of  the  user
  9917.       index files the defaults will be restored.
  9918.  
  9919.       From  the  main  menu  type  'D' to select "Delete and reset".  Then
  9920.       type 'C' for "Clear all privileges".  After confirmation  this  will
  9921.       clear all privileges.
  9922.  
  9923.  
  9924.  
  9925.  
  9926.  
  9927.  
  9928.                                    Chapter 16
  9929.  
  9930.                                   QWK Services
  9931.  
  9932.  
  9933.  
  9934.  
  9935.       QWK  is a popular standard for downloading messages and files from a
  9936.       BBS so that they  can  be  processed  by  offline  readers  such  as
  9937.       BlueWave  and  OLX.   TSX-BBS  fully  supports  the QWK standard and
  9938.       makes it easy  for  your  users  to  download  both  private  e-mail
  9939.       messages  and  messages  posted on public forums.  They can also use
  9940.       QWK to upload messages.
  9941.  
  9942.  
  9943.       16.1 Sysop Configuration
  9944.  
  9945.       Before you can use QWK to upload and download  messages,  the  sysop
  9946.       must  set  some  QWK  parameters by running the SYSOP program.  From
  9947.       the main SYSOP  menu  type  'G'  to  select  "General  setup".   The
  9948.       following items are significant to QWK:
  9949.  
  9950.       BBS Name -- This is the name of your bulletin board.
  9951.  
  9952.       Location -- The city and state where you are located.
  9953.  
  9954.       Phone  number  --  The  primary  phone  number of your dial-in modem
  9955.           lines.
  9956.  
  9957.       QWK ID -- Specify a 1 to 8 character abbreviated name for your  BBS.
  9958.           QWK packets downloaded will have this ID as their file name.
  9959.  
  9960.       Sysop 1 name -- The name of the primary sysop.
  9961.  
  9962.       After  you  finish filling in these items press ESC to return to the
  9963.       main menu.  Then type 'Q' to select  "QWK  Setup".   The  QWK  setup
  9964.       section  is  11  pages  long  and  you can move between the pages by
  9965.       pressing Page-up and Page-down.  However, you only have  to  provide
  9966.       information on the first page.
  9967.  
  9968.       The  first  part  of the setup screen specifies limits on the number
  9969.       of messages and the file sizes for QWK download packets.  Users  may
  9970.       use  the  QWK  configuration menu to set their own choices for these
  9971.       values but they will be limited  so  that  they  cannot  exceed  the
  9972.       values you specify with the SYSOP setup.
  9973.  
  9974.       Maximum  messages  per packet -- The maximum total messages that may
  9975.           be included in a QWK download packet.  Users  may  use  the  QWK
  9976.           configuration  menu  to  set their own choice for this value but
  9977.  
  9978.  
  9979.  
  9980.                                       173
  9981.  
  9982.       Chapter 16. QWK Services                                         174
  9983.  
  9984.  
  9985.           they will be limited so that they cannot exceed  the  value  you
  9986.           specify here.
  9987.  
  9988.       Maximum  messages  per  area  -- The maximum number of messages that
  9989.           will be included in a QWK packet from a single forum area.
  9990.  
  9991.       Maximum size of attached files -- The maximum size  of  an  attached
  9992.           file  to  include  in QWK download packets.  This is the size of
  9993.           an individual file, not the cumulative size of  all  files  that
  9994.           may go into a packet.
  9995.  
  9996.       The  second  part  of  the  QWK setup provides information about the
  9997.       programs and system commands used to  compress  and  decompress  QWK
  9998.       packets.
  9999.  
  10000.       Compression  program  name  --  This  is  the name of the executable
  10001.           program file that TSX-BBS should use to  compress  QWK  packets.
  10002.           The  name  may  include  a  device  and directory specification.
  10003.           Note: only the program name is specified here, not  any  options
  10004.           for the program.
  10005.  
  10006.       Compression  command line -- Specify the form of the command line to
  10007.           be passed to the program to perform a packet  compression.   The
  10008.           names  of  the  files  that  are  to be compressed are stored by
  10009.           TSX-BBS in a file named  ZIPLIST.DAT,  so  you  should  use  the
  10010.           appropriate  syntax  to  tell the compression program to look in
  10011.           that file for a list of files to compress into the packet.   The
  10012.           name  of  the  compressed  file  to  be  created  is inserted by
  10013.           TSX-BBS into the command line at the point where you  specify  a
  10014.           caret  character ("^") in the command file.  For example, if the
  10015.           command line specification is
  10016.  
  10017.                ^ @ZIPLIST.DAT
  10018.  
  10019.           and the name of the compressed file (as determined  by  TSX-BBS)
  10020.           is   "SANDH.QWK"  then  the  caret  is  replaced  by  this  name
  10021.           producing a command argument string of
  10022.  
  10023.                SANDH.QWK @ZIPLIST.DAT
  10024.  
  10025.       Decompression program name -- This is the  name  of  the  executable
  10026.           program  file that TSX-BBS should use to decompress QWK packets.
  10027.           The name may  include  a  device  and  directory  specification.
  10028.           Note:  only  the program name is specified here, not any options
  10029.           for the program.
  10030.  
  10031.       Decompression command line -- Specify the form of the  command  line
  10032.           to  be  passed  to  the  decompression  program.   As  with  the
  10033.           compression command line, specify a caret ("^") at the  position
  10034.           in  the  line where the name of the packet to be decompressed is
  10035.           to be inserted.
  10036.  
  10037.       Chapter 16. QWK Services                                         175
  10038.  
  10039.  
  10040.       16.1.1 Service Files
  10041.  
  10042.       Once you have filled in the  first  page  of  the  QWK  SYSOP  setup
  10043.       screen  you  may  optionally enter information in one or more of the
  10044.       remaining 10 screen.  Use the Page-down  key  to  advance  from  the
  10045.       first page of the setup to each successive page.
  10046.  
  10047.       Each  of  the remaining QWK setup screens describes a "service file"
  10048.       that will be downloaded to users if (a) the  file  exists,  (b)  the
  10049.       modification  date  of  the  file  is  more recent than the last QWK
  10050.       download for the user, and (c) the user  is  privileged  to  receive
  10051.       the   file.   Service  files  can  be  used  to  hold  any  type  of
  10052.       information that you wish to disseminate to your users.   You  could
  10053.       use  it to provide local or world news summaries, stock quotes, file
  10054.       lists, or any other information you choose.  For each  service  file
  10055.       the following items of information must be provided:
  10056.  
  10057.       Service  number  -- This is a number you assign to the service.  The
  10058.           number is used to relate  services  selected  by  users  to  the
  10059.           appropriate  files.   You  should assign a unique number to each
  10060.           service and you should avoid reusing numbers if you  discontinue
  10061.           services.  The service number is not displayed to the users.
  10062.  
  10063.       Filename  -- This is the name of the service file as it is stored on
  10064.           your disk.  The name  should  include  a  device  and  directory
  10065.           portion.
  10066.  
  10067.       Download  file -- This is the name to be assigned to the file in the
  10068.           download packet.
  10069.  
  10070.       Description -- This is a description of the nature of the file.
  10071.  
  10072.       Privileges -- This is a privilege expression of the  form  described
  10073.           in  Chapter  4  that  controls which users can receive the file.
  10074.           For example, you might charge extra  for  news  or  stock  quote
  10075.           files.
  10076.  
  10077.  
  10078.       16.2 User Configuration
  10079.  
  10080.       TSX-BBS  provides  users  with a menu that they can use to configure
  10081.       QWK options.  This menu is selected by typing 'Q' on  the  main  BBS
  10082.       menu  to  select  "QWK  offline  reader  module", followed by 'C' to
  10083.       select "Configure QWK options".  Technically, the QWK  configuration
  10084.       system  is invoked by use of the qwkcfg menu action which displays a
  10085.       choice menu stored in the file bbsbin:qwkcfg.mnu.
  10086.  
  10087.       The configuration menu displays a list of QWK  options  and  limits;
  10088.       the  user  can  type  a  letter  to  select  an item to change.  The
  10089.       following options may be set:
  10090.  
  10091.       Include E-mail -- Causes  private  E-mail  messages  in  the  user's
  10092.           inbox to be included in downloaded QWK packets.
  10093.  
  10094.       Chapter 16. QWK Services                                         176
  10095.  
  10096.  
  10097.       Include  attached  files  --  Causes  files  that  are  attached  to
  10098.           messages to be downloaded.
  10099.  
  10100.       Download your replies -- If set to "NO"  this  option  prevents  the
  10101.           downloading  of  any  messages  that have the user's name as the
  10102.           sender.
  10103.  
  10104.       Put BBS timestamp on msg -- Specifies that  the  creation  time  for
  10105.           uploaded  messages  is  to  be  set  to  the  time  when the BBS
  10106.           receives them rather than the date/time in the message itself.
  10107.  
  10108.       Suppress NDX creation -- Most offline  readers  expect  the  BBS  to
  10109.           include  a  "NDX" file with message index information as part of
  10110.           the download packet.  However, some offline readers do  not  use
  10111.           the  NDX  file  and you can save a little bit of time and packet
  10112.           space by suppressing the NDX file in this case.
  10113.  
  10114.       Download new bulletins -- If this option is set  to  "YES",  TSX-BBS
  10115.           checks  the  last  modification date of the following files each
  10116.           time  a  download   is   done:   BBS:NEWS1.MSG,   BBS:NEWS2.MSG,
  10117.           BBS:NEWS3.MSG,  BBS:NEWS4.MSG, BBS:NEWS5.MSG, BBS:DAILY.MSG.  If
  10118.           any of these files exist  and  have  a  modification  date  more
  10119.           recent  than  the  last QWK download done by the user, the files
  10120.           are concatenated into a file named NEWS.MSG  which  is  included
  10121.           with the download packet.
  10122.  
  10123.       Download  welcome message -- If this option is set to "YES", TSX-BBS
  10124.           checks the modification date of a  file  named  BBS:WELCOME.MSG.
  10125.           If  it  is  more  recent  than the last QWK download done by the
  10126.           user, the WELCOME.MSG file is downloaded with the packet.
  10127.  
  10128.       Download logoff message -- Causes TSX-BBS to check the  modification
  10129.           date  of  a  file named BBS:GOODBYE.MSG.  If the file exists and
  10130.           its modification date is more recent than the last QWK  download
  10131.           for the user, the GOODBYE.MSG file is included in the packet.
  10132.  
  10133.       Download  list  of  new files -- Causes TSX-BBS to prepare a list of
  10134.           the files that have been added to the  BBS  file  library  since
  10135.           the  last QWK download.  This list is included in the downloaded
  10136.           packet as a file named NEWFILES.MSG.
  10137.  
  10138.       Download empty packet -- If this option is  set  to  "YES",  TSX-BBS
  10139.           will  download  an empty QWK packet if there are no messages for
  10140.           the QWK download.  If this option is set to "NO" and  there  are
  10141.           no messages, then no QWK download is performed.
  10142.  
  10143.       Omit  download  prompt  --  If  this option is set to "YES", TSX-BBS
  10144.           does not display the "Download now" message and make you type  a
  10145.           key to proceed; the download begins immediately.
  10146.  
  10147.       Logoff  after  upload -- Causes an automatic logoff to occur after a
  10148.           QWK packet has been uploaded.
  10149.  
  10150.       Logoff after download -- Causes an automatic logoff to  occur  after
  10151.           a QWK packet has been downloaded.
  10152.  
  10153.       Chapter 16. QWK Services                                         177
  10154.  
  10155.  
  10156.       Maximum  messages  per  packet  --  Limits  the  maximum  number  of
  10157.           messages that will be included in a single QWK download  packet.
  10158.           The  user  is  limited and may not enter a value larger than the
  10159.           value specified in the SYSOP QWK setup.
  10160.  
  10161.       Maximum messages per area -- Limits the maximum number  of  messages
  10162.           that  will  be  included  from any forum area.  The user may not
  10163.           select a value greater than the value  specified  in  the  SYSOP
  10164.           QWK setup.
  10165.  
  10166.       Maximum  size  of attached files -- Specifies the maximum size of an
  10167.           attached file that will be included  in  QWK  download  packets.
  10168.           The  user  may not specify a value larger than the corresponding
  10169.           value specified in the SYSOP QWK setup.
  10170.  
  10171.       Maximum length of conference names --  Some  off-line  mail  readers
  10172.           can  display  long  conference  names  and  some can handle only
  10173.           short names.  Some readers even refuse to run  at  all  of  they
  10174.           are  given  names  longer  than they can handle.  This parameter
  10175.           allows the user to specify  the  maximum  length  of  conference
  10176.           names  that will be included in downloaded mail packets.  If the
  10177.           actual conference name is  longer  than  the  specified  maximum
  10178.           length,  the  left-most  portion  of  the  name  is truncated by
  10179.           TSX-BBS.
  10180.  
  10181.       If any service files are available, the user will be offered a  menu
  10182.       choice  labeled  "Select  services" on the main QWK menu.  When this
  10183.       choice is selected, the  user  is  presented  with  a  list  of  the
  10184.       services  that  are  available to him and he can mark which services
  10185.       files are to be included in his QWK download packets.   The  service
  10186.       selection is invoked by the qwkservices menu action.
  10187.  
  10188.  
  10189.       16.3 Off-line QWK Configuration
  10190.  
  10191.       In  addition  to  using  the  QWK  configuration  menu to change QWK
  10192.       options, users can also set QWK options  by  uploading  special  QWK
  10193.       messages  to  TSX-BBS.   To  accommodate  various  off-line readers,
  10194.       TSX-BBS accepts QWK configuration messages in two styles.
  10195.  
  10196.       To use the first type of configuration message, address the  message
  10197.       to  "QMAIL",  "QWK",  or  "QSO" (i.e, specify one of these names for
  10198.       the recipient of the message).  Specify "CONFIG" as the  subject  of
  10199.       the  message.   The  body of the message consists of one or more QWK
  10200.       configuration control commands specified one per  line.   The  valid
  10201.       commands are listed below:
  10202.  
  10203.       ADD  forum_number [highest_read] -- Add a forum to the set forums to
  10204.           be downloaded in QWK packets.  The "forum_number" is the  number
  10205.           of  the  forum.   The  "highest_read"  parameter is optional; it
  10206.           indicates the number of the highest message that has  been  read
  10207.           by  the  user  (messages  at and below this sequence number will
  10208.           not be included in QWK packets).  The  highest_read  number  may
  10209.           be specified in one of the following forms:
  10210.  
  10211.       Chapter 16. QWK Services                                         178
  10212.  
  10213.  
  10214.           number -- Specify an absolute message number.
  10215.  
  10216.           HIGH-number  --  Set  the highest-read number to a value that is
  10217.               'number' messages below the highest message  number  in  the
  10218.               forum.   This will cause 'number' messages to be included in
  10219.               the next downloaded QWK packet.
  10220.  
  10221.           -number -- Equivalent to "HIGH-number".
  10222.  
  10223.           LOW+number -- Set the highest-read number to  a  value  that  is
  10224.               'number'  messages above the lowest message number currently
  10225.               stored in the forum.
  10226.  
  10227.           +number -- Equivalent to "LOW+number".
  10228.  
  10229.       DROP forum_number -- Remove the  forum  with  the  specified  number
  10230.           from the list of forums in the QWK list.
  10231.  
  10232.       RESET  forum_number  highest_read  -- Reset the highest-message-read
  10233.           number for the specified  forum.   The  'highest_read'  argument
  10234.           may have the same form as for the ADD command.
  10235.  
  10236.       MAXNUMBER  number -- Specify the maximum number of messages that are
  10237.           to be included in QWK packets for each forum.
  10238.  
  10239.       FILES YES/NO -- Control whether  a  list  of  new  files  is  to  be
  10240.           included  in the QWK packet.  Specify "FILES YES" to include the
  10241.           list or "FILES NO" to exclude the list.
  10242.  
  10243.       WELCOME YES/NO --  Controls  whether  the  BBS  welcome  message  is
  10244.           included in QWK packets.
  10245.  
  10246.       GOODBYE  YES/NO  --  Controls whether the logoff message is included
  10247.           in QWK packets.
  10248.  
  10249.       BULLETINS YES/NO -- Control whether bulletins are  included  in  the
  10250.           QWK  packet.   Specify  "BULLETINS  YES" to include bulletins or
  10251.           "BULLETINS NO" to exclude them.
  10252.  
  10253.       NDX YES/NO -- Controls whether  the  NDX  message  pointer  file  is
  10254.           included in QWK packets.
  10255.  
  10256.       The following are examples of valid commands:
  10257.  
  10258.           ADD 3188
  10259.           ADD 3200 HIGH-50
  10260.           ADD 8726 LOW+100
  10261.           ADD 5531 457
  10262.           ADD 2219 +100
  10263.           ADD 6641 -50
  10264.           DROP 4377
  10265.           RESET 1145 -50
  10266.           BULLETINS NO
  10267.           FILES YES
  10268.           MAXNUMBER 200
  10269.  
  10270.       Chapter 16. QWK Services                                         179
  10271.  
  10272.  
  10273.       The  second  type of QWK configuration message is simpler but allows
  10274.       only a few commands, and only a single command can be performed  per
  10275.       message.   To  use this type of configuration message post a message
  10276.       to the forum whose configuration you wish to  modify.   Address  the
  10277.       message  to  "QMAIL" or "QWK" and place the configuration command in
  10278.       the subject field of the message.  The command applies to the  forum
  10279.       to  which  the  message  is  directed  so you do not specify a forum
  10280.       number  as  a  command  argument.   The   following   commands   are
  10281.       supported:
  10282.  
  10283.       ADD  [highest_read]  --  Add  the  forum  to  the  set  forums to be
  10284.           downloaded in QWK  packets.   The  "highest_read"  parameter  is
  10285.           optional;  it  indicates  the number of the highest message that
  10286.           has been read by the user (messages at and below  this  sequence
  10287.           number  will  not be included in QWK packets).  The highest_read
  10288.           value may have the same forms as described for the  ADD  command
  10289.           for the first message type.
  10290.  
  10291.       DROP -- Remove the forum from the list of forums in the QWK list.
  10292.  
  10293.       RESET  highest_read -- Reset the highest-message-read number for the
  10294.           forum.  The 'highest_read' argument may have the  same  form  as
  10295.           for the ADD command.
  10296.  
  10297.       For  example,  to  drop forum 2341 you should create a message using
  10298.       your off-line reader.  Send the message to forum 2341 (this  is  how
  10299.       TSX-BBS  knows  which  forum  is  being  affected),  specify "QMAIL"
  10300.       (without the quotes) as the recpient of  the  message,  and  specify
  10301.       "DROP" (without the quotes) as the subject for the message.
  10302.  
  10303.  
  10304.       16.4 QWK Download Operation
  10305.  
  10306.       To  use  QWK  to  download  messages  the user selects the "Download
  10307.       Messages" option from the QWK menu.  TSX-BBS  then  prepares  a  QWK
  10308.       download  packet containing the selected messages, files, bulletins,
  10309.       and  service  messages.   The  packet  is   compressed   using   the
  10310.       compression  program  specified  by  the  sysop.   The  name  of the
  10311.       download packet is bbsid.QWK where "bbsid" is the "QWK ID"  for  the
  10312.       BBS  specified  on  the "General setup" screen of the SYSOP program.
  10313.       If the user performs more than one QWK download per day,  the  first
  10314.       downloaded  file  of  the  day has the extension QWK, the second has
  10315.       QW0, the third has QW1, etc.   The  extension  names  are  reset  at
  10316.       midnight of each day.
  10317.  
  10318.       Once  a  QWK download is successfully completed, TSX-BBS updates the
  10319.       highest-message-read counters for each  forum  whose  messages  were
  10320.       included in the packet.
  10321.  
  10322.       Users  should  consult the documentation for the offline reader that
  10323.       they  have  selected  for  information  about  how  to  process  the
  10324.       downloaded  QWK  packet.   Usually,  the  first  step  (which may be
  10325.       performed by the offline reader)  is  to  decompress  the  bbsid.QWK
  10326.       file.
  10327.  
  10328.       Chapter 16. QWK Services                                         180
  10329.  
  10330.  
  10331.       16.5 QWK Menu Actions
  10332.  
  10333.       TSX-BBS  includes  a  QWK  menu  named  BBSBIN:QWK.MNU which you may
  10334.       alter to suit your needs.  You may also move the  QWK  related  menu
  10335.       actions  to  other  menus  or  remove those you choose not to offer.
  10336.       The following menu actions apply to QWK  services.   See  Chapter  5
  10337.       for information about setting up menus.
  10338.  
  10339.       frmqwkman  --  displays  a  list  of  the  forums  that the user has
  10340.           currently selected for QWK downloads and allows the user to  add
  10341.           and delete forums.  The form of the action is:
  10342.  
  10343.               action=frmqwkman
  10344.  
  10345.       qwkcfg   --  displays  a  menu  and  allows  the  user  to  set  QWK
  10346.           configuration options such as whether they want e-mail  messages
  10347.           downloaded.   The  text  of  the  menu  is  stored  in  the file
  10348.           bbsbin:qwkcfg.mnu.  You may alter it and alter the entry in  the
  10349.           BBS  language  phrase  file  with the label QWKCFG.  The form of
  10350.           the action is:
  10351.  
  10352.               action=qwkcfg
  10353.  
  10354.       qwkdownload  --  causes  the  TSX-BBS  QWK  system  to  collect  all
  10355.           messages  from  QWK selected forums, create a compressed packet,
  10356.           and download the packet to the user.  The  form  of  the  action
  10357.           is:
  10358.  
  10359.               action=qwkdownload(personal)
  10360.  
  10361.           where  the  'personal'  argument is optional.  If the 'personal'
  10362.           argument is omitted or 0 is specified for it,  all  messages  in
  10363.           the  selected  forums are downloaded.  If 1 is specified for the
  10364.           argument  then  only  messages  addressed  to   the   user   are
  10365.           downloaded.
  10366.  
  10367.       qwkservices  --  presents  a  list  of  service  files  that  may be
  10368.           included  in  downloaded  QWK  packets.   A  menu  is  displayed
  10369.           showing  each  available  service  and the user can select which
  10370.           ones are wanted.  The form of the action is:
  10371.  
  10372.               action=qwkservices
  10373.  
  10374.       qwkupload -- causes TSX-BBS to prompt the user to begin uploading  a
  10375.           QWK packet with outgoing messages.  The form of the action is
  10376.  
  10377.               action=qwkupload
  10378.  
  10379.  
  10380.  
  10381.  
  10382.  
  10383.  
  10384.                                    Chapter 17
  10385.  
  10386.                                     TSX-Term
  10387.  
  10388.  
  10389.  
  10390.  
  10391.       TSX-BBS  supports  a  variety  of software communication packages by
  10392.       providing users with a  choice  of  whether  they  can  accept  ANSI
  10393.       sequences,  whether  they  have  color support, and by giving them a
  10394.       choice of file transfer protocols.  In addition to flexible  support
  10395.       for  the  various  third  party communication packages, TSX-BBS also
  10396.       supports S&H's own communication software, TSX-Term.   This  chapter
  10397.       describes  the  advantages  the customers of your board will receive
  10398.       if you acquire the TSX-Term option and how to implement  it  if  you
  10399.       decide to do so.
  10400.  
  10401.  
  10402.       17.1 Why get TSX-Term?
  10403.  
  10404.       17.1.1 Licensing
  10405.  
  10406.       One  of the benefits to your users of having your board licensed for
  10407.       TSX-Term support is that TSX-Term is licensed once for  a  host  TSX
  10408.       system,  not  for  each remote workstation that dials into the host.
  10409.       This means that you are welcome to provide TSX-Term as  a  shareware
  10410.       communications  package  to  all  your  customers.   This saves your
  10411.       customers the expense of buying off the  shelf  software  or  paying
  10412.       shareware registration fees.
  10413.  
  10414.       17.1.2 Background file transfer
  10415.  
  10416.       For  TSX-BBS  users,  the  most unique feature of TSX-Term is how it
  10417.       uploads and downloads files.  Although the  file  transfer  protocol
  10418.       is  slower  than  Zmodem,  users  do not need to interrupt other BBS
  10419.       activities to upload or download files.  This means that a user  can
  10420.       select  a  file  from  the  file  library, begin downloading it, and
  10421.       continue to browse the file library while the download runs  in  the
  10422.       background.   Users  can chat, send and receive E-mail, and even run
  10423.       doors while the file transfer  continues.   A  status  line  at  the
  10424.       bottom of their screen shows the progress of the file transfer.
  10425.  
  10426.       17.1.3 Full ANSI and color support
  10427.  
  10428.       TSX-Term  and  TSX  are  fully  integrated.  All ANSI sequences, all
  10429.       color and monochrome attributes, and any keyboard keys used  by  the
  10430.       BBS work fully with TSX-Term.
  10431.  
  10432.  
  10433.  
  10434.  
  10435.  
  10436.                                       181
  10437.  
  10438.       Chapter 17. TSX-Term                                             182
  10439.  
  10440.  
  10441.       17.1.4 Dialing directory
  10442.  
  10443.       TSX-Term  includes a built-in dialing directory so that users do not
  10444.       need to manually dial your board.  In fact, if they enter their  BBS
  10445.       username and password, their logon will be fully automated.
  10446.  
  10447.       17.1.5 Compressed data stream
  10448.  
  10449.       With  a  regular communication package, screen data must be sent out
  10450.       of the bulletin board verbatim.  However, because  TSX-Term  uses  a
  10451.       proprietary  communication  protocol  which  is supported by the TSX
  10452.       host system, screen data is compressed.   For  example,  instead  of
  10453.       sending  out  50 consecutive graphics characters to make a menu bar,
  10454.       TSX will send out instructions to TSX-Term telling it replicate  the
  10455.       character 50 times.
  10456.  
  10457.       17.1.6 Full integration
  10458.  
  10459.       TSX-Term  is  fully  integrated  with the TSX operating environment.
  10460.       Because S&H has implemented the  host  support  software,  the  user
  10461.       software,  and  the  communications  protocol, you are guaranteed to
  10462.       provide an unparalleled remote workstation for remote  execution  of
  10463.       both the 32 bit TSX-BBS engine as well as 16 bit door programs.
  10464.  
  10465.  
  10466.       17.2 How to distribute TSX-Term
  10467.  
  10468.       The  TSXTERM  program,  TSXTERM.EXE,  is  all  your users will need.
  10469.       This file  is  distributed  with  your  TSX-Lite  or  TSX-32  system
  10470.       distribution.   In  addition,  TSX-BBS  is  distributed with a brief
  10471.       installation and usage guide for TSX-Term  named  TSXTERM.DOC.   You
  10472.       are  welcome  to  customize  the TSXTERM.DOC file for your board and
  10473.       distribute it and the TSXTERM.EXE program once your site is  license
  10474.       for  TSX-Term  support.   We  suggest  you  make a file archive with
  10475.       these files, and any ancillary README file you wish,  and  place  it
  10476.       in your board's file library.
  10477.  
  10478.  
  10479.       17.3 How to implement support for TSX-Term
  10480.  
  10481.       In  order to be able to support TSX-Term, the TSX system must load a
  10482.       special support driver when it first  starts.   Whether  the  system
  10483.       loads   this  driver  is  controlled  by  a  TSGEN  parameter  named
  10484.       DOTSXTERM.  This parameter must be set  to  1  by  using  the  TSGEN
  10485.       program  (TSGEN  is  fully  described  in  the System Generation and
  10486.       Installation manual).
  10487.  
  10488.       Before the driver can load on a full TSX system, you must order  the
  10489.       TSX-Term  option  and  obtain  a license key which you type into the
  10490.       LICENSE program.  The key you receive  will  activate  the  TSX-Term
  10491.       option  (type  SHOW  FEATURES  at  the  command  prompt  to see what
  10492.       features are currently active).
  10493.  
  10494.       Whether a dial-in user  is  using  the  TSX-Term  software  will  be
  10495.       automatically  detected  by  TSX-BBS when the automatic ANSI support
  10496.  
  10497.       Chapter 17. TSX-Term                                             183
  10498.  
  10499.  
  10500.       detection is done.  This ANSITEST library function  is  executed  by
  10501.       the  LOGON tpl program provided by S&H.  If you want to replace this
  10502.       or customize it, be sure to include the  ANSITEST  function  if  you
  10503.       want TSX-Term support.
  10504.  
  10505.  
  10506.       17.4 TSX-Term and file transfer
  10507.  
  10508.       The  TSX-Term  software  does  not include XMODEM, YMODEM, or ZMODEM
  10509.       file transfer protocols.  Instead, it uses a  proprietary  technique
  10510.       which  permits  it to multiplex various types of data (file, screen,
  10511.       keyboard, and so on).  Because of  this,  the  TSX-BBS  engine  will
  10512.       automatically  use  this  protocol  when  users perform an upload or
  10513.       download.  Users are  still  permitted  to  select  a  default  file
  10514.       transfer  protocol in the user configuration screen, but it will not
  10515.       apply when they are dialed in using TSX-Term.
  10516.  
  10517.       When a user invokes a TSX-Term file transfer, a status  bar  showing
  10518.       the  progress of the file transfer is displayed at the bottom of the
  10519.       screen.  This will allow the user to monitor  the  progress  of  the
  10520.       file transfer as he continues to use the board.
  10521.  
  10522.       The  only  time  a  user  is not allowed to continue using the board
  10523.       during a TSX-Term file transfer is when he has asked  to  be  logged
  10524.       off  after  the  file  transfer  takes place.  In this case, the BBS
  10525.       will wait until the download has completed, then  begin  the  logoff
  10526.       countdown.
  10527.  
  10528.       If  a user has continued on line during a file transfer, and asks to
  10529.       log off the board before the file transfer is  finished,  a  warning
  10530.       message  will  be given notifying him that the file transfer has not
  10531.       yet completed.
  10532.  
  10533.  
  10534.  
  10535.  
  10536.  
  10537.  
  10538.                                    Chapter 18
  10539.  
  10540.                                  Usenet Support
  10541.  
  10542.  
  10543.  
  10544.  
  10545.  
  10546.       18.1 Introduction
  10547.  
  10548.       Usenet, which stands for "user's network", is a cooperative  network
  10549.       of  computers  which  originated on Unix computers and utilizes UUCP
  10550.       (the Unix to Unix copy program) to transfer data.
  10551.  
  10552.       Usenet supports both electronic mail and discussion  groups.   Email
  10553.       messages  are  referred  to  as  "RMAIL"  and  discussion groups are
  10554.       referred to a "RNEWS", since these are the names  of  Unix  programs
  10555.       which process each type of data.
  10556.  
  10557.       Usenet  forums  are  a  body  of  several thousand discussion groups
  10558.       called newsgroups.  TSX-BBS forums  were  designed  with  Usenet  in
  10559.       mind.   The  volume  of  new  usenet  messages is very high, tens of
  10560.       megabytes per day.  A site which  wishes  to  hold  Usenet  messages
  10561.       should count on needing hundreds of megabytes of disk space.
  10562.  
  10563.       There  are  various  methods  to  receive  Usenet  data  and various
  10564.       methods for transmitting Usenet  data.   Supporting  each  of  these
  10565.       services  requires  different  mail  tossers,  scanners,  and so on.
  10566.       Therefore, each supported Usenet service is treated in  a  different
  10567.       chapter.
  10568.  
  10569.  
  10570.       18.2 Programs related to usenet
  10571.  
  10572.       The  following  list  summarizes  those programs which are used with
  10573.       TSX-BBS to provide incoming and outgoing Usenet support.   You  will
  10574.       have  to  utilize a different selection of them depending on how you
  10575.       receive and send Usenet messages.
  10576.  
  10577.         . BAGTOSS is a tosser for Usenet which  works  from  files  called
  10578.           "BAG"  files.  These files are sets of valid Usenet messages and
  10579.           can be obtained from a satellite  service  such  as  PAGESAT  or
  10580.           through  a UUCP provider such as UUNET.  The BAGTOSS program can
  10581.           automatically create new forums as it  encounters  messages  for
  10582.           them.  This is discussed in 9.2.
  10583.  
  10584.         . GETSAT  is a program for subscribers to the Pagesat news service
  10585.           which reads incoming Pagesat data from a serial line and  writes
  10586.           out compressed and uncompress bag files.
  10587.  
  10588.  
  10589.  
  10590.                                       184
  10591.  
  10592.       Chapter 18. Usenet Support                                       185
  10593.  
  10594.  
  10595.         . GZIP  is  the Gnu freeware compression and decompression utility
  10596.           which decompresses the bag files written by Pagesat so they  can
  10597.           be fed into BAGTOSS.
  10598.  
  10599.         . UUCICO  is  a  shareware  Unix to Unix copy program which may be
  10600.           used to receive incoming messages directly from  another  Usenet
  10601.           site,  to  send  outgoing  messages to a Usenet site, or to send
  10602.           and receive from a Usenet provider service.
  10603.  
  10604.         . USESCAN is  the  Usenet  scanner  program.   It  reads  outgoing
  10605.           Usenet  messages  from  the Usenet message base and formats them
  10606.           into a "batch" or "bag" for sending out.   UUCICO  can  then  be
  10607.           used to send them.
  10608.  
  10609.         . BBSCD  is  a  program  which  can be used by the batch file that
  10610.           runs the bagfile tosser to move to the  directory  for  incoming
  10611.           UUCP data, the directory for incoming Pagesat data, and so on.
  10612.  
  10613.  
  10614.       18.3 Bag file and rnews message format
  10615.  
  10616.       While  it  is  not necessary to understand all the subtleties of the
  10617.       usenet message format it can be useful to have a  general  sense  of
  10618.       their   overall  structure  and  appearance  so  that  they  can  be
  10619.       recognized as such.
  10620.  
  10621.       A bag file is an ascii file with LF (line  feed  only)  terminators.
  10622.       This  is  unlike  normal  DOS ascii files which have CR/LF (carriage
  10623.       return/line feed) terminators.  Each file is a set of  one  or  more
  10624.       messages.  The form of each message is
  10625.  
  10626.           #rnews <count>
  10627.           <message header>
  10628.           <message>
  10629.  
  10630.       Each section is described here.
  10631.  
  10632.       1.  #rnews  <count>  This is the line which indicates the start of a
  10633.           news message.  Messages begin on a new line.   This  line  would
  10634.           say  #rmail in the case of a mail message.  The <count> field is
  10635.           the size of the message in characters.
  10636.  
  10637.       2.  <message header> The next section of the message is the  header.
  10638.           The  form  of the header is specified in RFC ???  as a standard.
  10639.           It consists of lines beginning with specifiers.  Each  specifier
  10640.           is  a  keyword  followed  by  a  ':'.   The  keyword  is used to
  10641.           indicate information of some sort.  Here is a sample header:
  10642.  
  10643.               Path: pagesat.net!decwrl!Austria.EU.net!uunet!detctr!Mark
  10644.               From: Mark Hascom
  10645.               Newsgroups: alt.cooking.chili,alt.cooking.tex_mex
  10646.               Subject: - Beans in chili? No way!
  10647.               Date: 3 Sep 1994 09:04:23 -0400
  10648.               Lines: 27
  10649.               Sender: markg@news.gate.net
  10650.  
  10651.       Chapter 18. Usenet Support                                       186
  10652.  
  10653.  
  10654.               Distribution: world
  10655.               Message-ID: <1994Sep7.090713.1@detctr>
  10656.               NNTP-Posting-Host: id.post.net
  10657.               Originator: Mark@detctr.com
  10658.               X-Posting-Software: Xpost V 1.7 Libra Software (libra.com)
  10659.  
  10660.           The message header is actually composed of two parts,  the  part
  10661.           before  the  "Lines:"  line and the part after.  The part before
  10662.           is considered to be control information needed by  tossers.   An
  10663.           example  is  the "Newsgroups:" line which tells the tosser which
  10664.           forum  to  place  the  message  into.   The  information   after
  10665.           "Lines:"  is viewed by readers of the message and identifies the
  10666.           sender.  The value on the "Lines:" line is the number  of  lines
  10667.           in  the message after the "Lines:" line to the next message.  As
  10668.           with the count field, this can be used to validate the message.
  10669.  
  10670.       3.  <message> The text of the  message  is  the  last  part  of  the
  10671.           message  and  is  simply  ascii text.  The message ends when the
  10672.           file it is contained in ends or when the  next  #rnews  line  is
  10673.           processed.
  10674.  
  10675.       Here  is a sample of a complete message.  A bag file is simply a set
  10676.       of messages which are concatenated.
  10677.  
  10678.           #rnews 1122
  10679.           Path: pagesat.net!decwrl!Austria.EU.net!uunet!detctr!Mark
  10680.           From: Mark Hascom
  10681.           Newsgroups: alt.cooking.chili,alt.cooking.tex_mex
  10682.           Subject: - Beans in chili? No way!
  10683.           Date: 3 Sep 1994 09:04:23 -0400
  10684.           Lines: 27
  10685.           Sender: markg@news.gate.net
  10686.           Distribution: world
  10687.           Message-ID: <1994Sep7.090713.1@detctr>
  10688.           NNTP-Posting-Host: id.post.net
  10689.           Originator: Mark@detctr.com
  10690.           X-Posting-Software: Xpost V 1.7 Libra Software (libra.com)
  10691.  
  10692.           Jim@veggie.com wrote:
  10693.  
  10694.           >> I like beans in chili. It makes the meal more complete
  10695.           >> and helps me to cut down on the amount of meat. Also,
  10696.           >> I don't like it too hot.
  10697.  
  10698.           This is just what I'm talking about! This is the just the
  10699.           kind of unmanly drivel which led to the 70's! I'm going
  10700.           to spell this out for you in small words so you can
  10701.           understand.
  10702.  
  10703.                   REAL CHILI DOES NOT HAVE BEANS!!!
  10704.  
  10705.                               'Nuff said
  10706.                                  Mark
  10707.  
  10708.           +-------------------------------------------------------------+
  10709.  
  10710.       Chapter 18. Usenet Support                                       187
  10711.  
  10712.  
  10713.           |  The opinions expressed are mine alone.  |  Mark@detctr.com |
  10714.           |  Disagree with them at your own peril!   |  Area 76, stop 4 |
  10715.           +-------------------------------------------------------------+
  10716.  
  10717.  
  10718.       18.4 Receiving Pagesat data with GETSAT
  10719.  
  10720.       18.4.1 Introduction
  10721.  
  10722.       The purpose of the GETSAT program is to  read  satellite  data  from
  10723.       the  Pagesat  news  service and create a series of "bag" files which
  10724.       can then be  processed  by  the  bag  file  tosser  (BAGTOSS).   The
  10725.       pagesat  service  continuously transmits usenet mail, which includes
  10726.       usenet newsgroups (also known as rnews) and usenet  mail  (known  as
  10727.       rmail).   The  BAGTOSS program will toss the rnews messages into the
  10728.       forum system and toss the rmail messages into  the  electronic  mail
  10729.       system,  much  as  the  Fidonet tosser distinguishes between netmail
  10730.       and echomail.
  10731.  
  10732.       18.4.2 Input to GETSAT
  10733.  
  10734.       The GETSAT program reads incoming Pagesat data from a single  serial
  10735.       port.   To activate GETSAT, all you need to do is specify the device
  10736.       name of the serial port to which your  Pagesat  feed  is  connected.
  10737.       You  specify  this name using the Usenet configuration screen of the
  10738.       SYSOP program.  Use of this screen is described on page 160.
  10739.  
  10740.       Actually the STARTBBS.CMD batch file  which  is  executed  when  you
  10741.       first  start  TSX  always  detaches  the  GETSAT program to run as a
  10742.       background task.  However, if GETSAT discovers  that  you  have  not
  10743.       specified  the  name  of  the  Pagesat  terminal  line  in SYSOP, it
  10744.       assumes that you  do  not  subscribe  to  the  Pagesat  service  and
  10745.       immediately exits.
  10746.  
  10747.       Beginning  in  October  1994, the Pagesat service began transmitting
  10748.       bag files in a compressed format.  Before the  resultant  bag  files
  10749.       can  be  processed  by BAGTOSS, they must be "unzipped".  The GETSAT
  10750.       program distinguishes between zipped and unzipped data  and,  as  we
  10751.       see below, creates different output files for each.
  10752.  
  10753.       18.4.3 Output of GETSAT
  10754.  
  10755.       GETSAT  reads  the  continuous Pagesat feed from a serial line which
  10756.       you specify on  the  command  line.   For  uncompressed  input,  the
  10757.       output  files  are  a  series  of  bag  files with names of the form
  10758.       NEWS000.BAG, NEWS0001.BAG, and so on.
  10759.  
  10760.       To prevent the bagfile tosser from attempting to  toss  a  bag  file
  10761.       before  the  GETSAT program has finished writing it, GETSAT actually
  10762.       writes files with the name of NEWSnnnn.OPN, then renames  them  once
  10763.       they  have  closed to NEWSnnn.BAG, thus making them available to the
  10764.       tosser once they are complete.
  10765.  
  10766.       Compressed data is emitted in the  same  fashion,  except  that  the
  10767.       output  files  are  given the extension of BAZ.  These filenames are
  10768.  
  10769.       Chapter 18. Usenet Support                                       188
  10770.  
  10771.  
  10772.       used to alert subsequent processing steps of the need to invoke  the
  10773.       GNU unzip program to create the corresponding bag files.
  10774.  
  10775.       18.4.4 The GETSAT event log
  10776.  
  10777.       The  GETSAT  program  writes  messages  to an event log named GETSAT
  10778.       while it runs, so you  can  monitor  its  activity.   To  view  this
  10779.       activity,  use  the  SHOW  EVENT command and select the GETSAT event
  10780.       log from the browse screen, or  issue  the  command  "EVENT  GETSAT"
  10781.       from the prompt.
  10782.  
  10783.  
  10784.       18.5 Unzipping compressed Pagesat files
  10785.  
  10786.       We  will see below that the BAGTOSS program is used to toss messages
  10787.       from  BAG  files  into  TSX-BBS.   However,  the   Pagesat   service
  10788.       transmits  transmits  files which have been compressed using the GNU
  10789.       zip utility, which must be "unzipped" before they can  be  fed  into
  10790.       the  bagfile  tosser.   The  command  file  which  runs  the BAGTOSS
  10791.       contains the command needed to do this.
  10792.  
  10793.       As we mentioned, GETSAT will write output files with  the  extension
  10794.       of  BAZ  if  it encounters satellite data which was compressed using
  10795.       the GNU zip program.  These files must be unzipped by  the  GNU  zip
  10796.       program,  GZIP.EXE,  which  is distributed with TSX-BBS.  To perform
  10797.       this, the BAGTOSS batch file uses the TSX EXPAND command  to  create
  10798.       a  temporary  batch  file  containing  one GZIP command for each BAZ
  10799.       file.  This EXPAND command looks like this:
  10800.  
  10801.           EXPAND/OUT=TEMP.CMD *.BAZ "GZIP -D |F.BAZ |F.BAG|/DEL |F.BAZ"
  10802.  
  10803.       Suppose that, at the time that the bag tosser runs, there are  three
  10804.       compressed bags named:
  10805.  
  10806.           NEWS0044.BAZ
  10807.           NEWS0046.BAZ
  10808.           NEWS0047.BAZ
  10809.  
  10810.       The result of the EXPAND command shown above is:
  10811.  
  10812.           GZIP -D NEWS0044.BAZ NEWS0044.BAG
  10813.           DEL NEWS0044.BAZ
  10814.           GZIP -D NEWS0046.BAZ NEWS0046.BAG
  10815.           DEL NEWS0046.BAZ
  10816.           GZIP -D NEWS0047.BAZ NEWS0047.BAG
  10817.           DEL NEWS0047.BAZ
  10818.  
  10819.       You  can  see that the GZIP program is invoked with the -d switch to
  10820.       force it to decompress each BAZ file.  The  decompressed  output  is
  10821.       written  to  BAG  files.   Then, the compressed BAZ file is deleted.
  10822.       The bag files are now ready  to  be  tossed,  as  described  in  the
  10823.       following section.
  10824.  
  10825.       Chapter 18. Usenet Support                                       189
  10826.  
  10827.  
  10828.       18.6 Tossing incoming mail with BAGTOSS
  10829.  
  10830.       As  we  have  discussed,  a  "bag"  file  is  a  file which contains
  10831.       messages to be added to usenet newsgroups.  Bag files can come  from
  10832.       different  sources,  including  providers such as UUNET which supply
  10833.       usenet newsgroups, and mail services and satellite services such  as
  10834.       PAGESAT.   We have seen that you will need to set up the appropriate
  10835.       program such as GETSAT for Pagesat data or UUCICO for incoming  UUCP
  10836.       data  so  that  bag  files  are generated and placed in the incoming
  10837.       Usenet directory  for  subsequent  tossing.   These  bag  files  are
  10838.       tossed into the forum system and email message base by BAGTOSS.
  10839.  
  10840.       For  rnews,  incoming  messages  are  added to the appropriate forum
  10841.       according to the "Newsgroups:" line in the message.
  10842.  
  10843.       The BAGTOSS program assumes that the files are ready for  processing
  10844.       and  does  not  concern itself with the details of how the files got
  10845.       there.  Thus, the same tosser can be used  with  any  provider  that
  10846.       will produce files in format described in this section.
  10847.  
  10848.       The  tosser  can  delete  the  files  after processing or leave them
  10849.       alone for other processing.
  10850.  
  10851.       The scheduler can  be  used  to  start  the  BAGTOSS  program.   The
  10852.       scheduler  must start a command procedure which executes the BAGTOSS
  10853.       program.
  10854.  
  10855.       The BAGTOSS program accepts a single  argument,  the  BAG  files  to
  10856.       process.  Wildcards are allowed.  Here is a sample invocation.
  10857.  
  10858.           BAGTOSS C:\PAGESAT\*.BAG
  10859.  
  10860.       This  will  process  all  the  files  named .BAG in the "C:\PAGESAT"
  10861.       directory.  By default, the files will be deleted after  processing.
  10862.       This  can  be  very  convenient  for handling the constant stream of
  10863.       data from satellite services such as the PAGESAT service.
  10864.  
  10865.       To retain the .BAG files after  processing  use  a  command  of  the
  10866.       following form.
  10867.  
  10868.           BAGTOSS/NODELETE C:\PAGESAT\*.BAG
  10869.  
  10870.  
  10871.       18.7 An example using GETSAT, BAGTOSS, and FSWEEP.
  10872.  
  10873.       As  an example of the flexibility and power of TSX-BBS, consider the
  10874.       following combination of services and programs.
  10875.  
  10876.       The GETSAT program processes serial data from the satellite  service
  10877.       Pagesat.   It  constantly  produces zipped BAG files from the serial
  10878.       stream it reads from the satellite.   Since  each  file  created  is
  10879.       unique  it  works  very  well  to  allow  the  GETSAT program to run
  10880.       continuously and to run the BAGTOSS program every 15 minutes  or  so
  10881.       as specified by the scheduler.
  10882.  
  10883.       Chapter 18. Usenet Support                                       190
  10884.  
  10885.  
  10886.       Every  15 minutes, the BAGTOSS procedure is executed by the schedule
  10887.       manager.  This procedure uses the TSX EXPAND  command  to  create  a
  10888.       series  of  GZIP  commands which expand the compressed GZ files into
  10889.       BAG files.
  10890.  
  10891.       The BAGTOSS program then tosses this new mail into the forum  system
  10892.       (while users are logged in and reading existing messages).
  10893.  
  10894.       The  BAGTOSS  program  can  delete  the  files after it is finished,
  10895.       freeing up space  for  more  files  to  be  created  by  the  GETSAT
  10896.       program.
  10897.  
  10898.       These  three programs thus provide a constant stream of new messages
  10899.       to forums without sysop intervention.
  10900.  
  10901.       Of  course,  without  some  sort  of  intervention  to  delete   old
  10902.       messages,  disk  drive  would very quickly fill up given the size of
  10903.       the daily Usenet feed.  One of the ways that you  can  intervene  is
  10904.       to  specify  that  the  bagfile tosser should not toss messages into
  10905.       forums which your  customers  are  not  interested  in.   Also,  the
  10906.       BAGTOSS  program  detects  duplicate  messages  (from satellites the
  10907.       news feed can be repeated more  than  once  per  day)  and  discards
  10908.       them.   Finally,  you  can use the forum sweeper program to clean up
  10909.       old messages and to prevent forums from getting  too  many  messages
  10910.       in them.
  10911.  
  10912.       The  sweeper program FSWEEP can be scheduled to run automatically by
  10913.       the scheduler.  Once the sysop tunes the FSWEEP  parameters  to  the
  10914.       desired  setup  (number of messages to keep and number of days), the
  10915.       entire forum processing becomes  an  invisible  utility,  constantly
  10916.       adding  new  messages and expiring old, all without any intervention
  10917.       by the sysop.
  10918.  
  10919.  
  10920.       18.8 Installing UUCICO
  10921.  
  10922.       A shareware implementation  of  uucopy,  UUCICO,  is  included  with
  10923.       TSX-BBS.   UUCICO  is  also  distributed  as  part of the Waffle BBS
  10924.       package.  UUCICO can be used to send  and  receive  Usenet  messages
  10925.       from other UUCP programs.
  10926.  
  10927.       If  you  want  to  use UUCICO for either incoming or outgoing Usenet
  10928.       news or mail, you must first install it.  UUCICO requires  a  couple
  10929.       of   directories   named   ADMIN   and   SYSTEM,   which   would  be
  10930.       subdirectories  of  \WAFFLE\  in  the  case  that  you  had   Waffle
  10931.       installed  on  your  system.  However, assuming that you do not, and
  10932.       that your TSXBBS system is installed in a directory named  \TSXBBS\,
  10933.       you  will  not have to create these directories yourself.  The batch
  10934.       files provided with TSX for running UUCICO create them  before  they
  10935.       are needed.
  10936.  
  10937.       UUCICO  also  requires  an  environment  variable named WAFFLE which
  10938.       tells it what where the main Waffle control file is.   However,  you
  10939.       do  not  need to edit your AUTOEXEC.BAT file and place a SET command
  10940.       there because the necessary SET command (which  again  assumes  that
  10941.  
  10942.       Chapter 18. Usenet Support                                       191
  10943.  
  10944.  
  10945.       TSX-BBS  is  installed  in  the  \TSXBBS\  directory) is also in the
  10946.       batch files which run WAFFLE.
  10947.  
  10948.       You will,  however,  need  to  edit  two  control  files  which  are
  10949.       required  by  UUCICO  to  run.   The first of these is named STATIC.
  10950.       (there is no extension).  Normally this control file  would  contain
  10951.       various  other  parameters  related to Waffle.  However, the control
  10952.       file shown below (which is also distributed with  TSX-BBS)  contains
  10953.       everything that UUCICO needs:
  10954.  
  10955.           # Use the below template for systems WITH domain names:
  10956.  
  10957.           node         : mynode.santa-cruz.ca.us
  10958.           alias        : mynode.UUCP
  10959.           uucpname     : mynode
  10960.  
  10961.           # Use the below template for systems WITHOUT domain names:
  10962.  
  10963.           #node        : mynode.UUCP
  10964.           #alias       : mynode.UUCP
  10965.           #uucpname    : mynode
  10966.  
  10967.           #  directories
  10968.  
  10969.           spool        : C:/tsxbbs/spool
  10970.           waffle       : C:/tsxbbs
  10971.  
  10972.       Substitute  the  phrase  "mynode"  for  the name of your Usenet node
  10973.       name.   Also,  if  TSX-BBS  is  not  installed  in   the   directory
  10974.       C:\TSXBBS\,  make  the  appropriate  changes to the SPOOL and WAFFLE
  10975.       lines.
  10976.  
  10977.       Note that the SPOOL  directory  specified  here  must  be  the  same
  10978.       directory  as  the  one specified for the "Usenet working directory"
  10979.       you specify in the SYSOP Usenet parameters screen.
  10980.  
  10981.  
  10982.       18.9 Receiving Usenet mail with UUCICO
  10983.  
  10984.       If you have configured TSX-BBS to allow other UUCP nodes to log  in,
  10985.       run  UUCICO,  and receive Usenet mail from them, you will have to be
  10986.       sure that the BAGTOSS.CMD batch file is successfully  locating  this
  10987.       incoming mail and tossing it in.
  10988.  
  10989.       UUCICO  will  place  incoming  data  in  a subdirectory of its spool
  10990.       directory whose name matches the  name  of  the  Usenet  node  which
  10991.       feeds  you  data.  Suppose, for example, that the name of the UUCICO
  10992.       spool directory is \TSXBBS\SPOOL\, and the name of your Usenet  node
  10993.       is  EARL.   Then incoming data files will be placed in the directory
  10994.       \TSXBBS\SPOOL\EARL\.
  10995.  
  10996.       You should specify this directory in the "Incoming  UUCP  directory"
  10997.       field  of  the  SYSOP Usenet configuration screen.  This permits the
  10998.       BBSCD command, used by the BAGTOSS.CMD  batch  file,  to  change  to
  10999.       this directory and locate the incoming Usenet files.
  11000.  
  11001.       Chapter 18. Usenet Support                                       192
  11002.  
  11003.  
  11004.       It  is common for bag files to be compressed using the Unix compress
  11005.       program before a UUCP program  like  UUCICO  actually  transmits  it
  11006.       over  the  phone  line.   The  TSX  version  of  the Unix uncompress
  11007.       program, UNCOMP.EXP,  is  used  to  uncompress  these  files  before
  11008.       tossing them with BAGTOSS.
  11009.  
  11010.       The  BAGTOSS.CMD  procedure  uses the TSX EXPAND program to create a
  11011.       temporary batch file with one UNCOMP  command  for  each  data  file
  11012.       found  in  the  incoming  Usenet  directory.   These  data files are
  11013.       assumed to have extensions of D.   For  example,  if  your  incoming
  11014.       Usenet directory contained the files:
  11015.  
  11016.           E443X23.D
  11017.           E443Z01.D
  11018.  
  11019.       the EXPAND command, which looks like:
  11020.  
  11021.           EXPAND/OUT=TEMP.CMD *.D "UNCOMP |F.D |F.BAG|/DEL |F.D"
  11022.  
  11023.       will write the the following commands to file TEMP.CMD:
  11024.  
  11025.           UNCOMP E443X23.D E443X23.BAG
  11026.           DEL E443X23.D
  11027.           UNCOMP E443Z01.D E443Z01.BAG
  11028.           DEL E443Z01.D
  11029.  
  11030.       Note  that  the  UNCOMP  program is invoked once for each data file,
  11031.       writing output to a corresponding bag file.  The bag files are  then
  11032.       ready to be tossed, and the data files are deleted.
  11033.  
  11034.  
  11035.       18.10 Sending mail with UUCICO
  11036.  
  11037.       Because  the  volume  of  Usenet  newsgroups  is very large, you may
  11038.       select to use a satellite transmission  service  for  incoming  data
  11039.       and use a dial-up Usenet provider for outgoing mail.
  11040.  
  11041.       To  support  outgoing  Usenet  mail,  you  use  the SYSOP program to
  11042.       create  a  Usenet  message  base.   Setting  up  message  bases   is
  11043.       described in Section 15.9; the message area number for Usenet is 4.
  11044.  
  11045.       As  your  BBS  users make contributions to Usenet newsgroups or send
  11046.       personal Usenet mail, these  messages  are  accrued  in  the  Usenet
  11047.       message  base.   Periodically, the UUOUT command procedure is run to
  11048.       actually send them.
  11049.  
  11050.       If your Usenet provider expects UUCOPY to be used to send  in  mail,
  11051.       you can use UUCICO for this purpose.
  11052.  
  11053.       As  shipped,  the  UUOUT  command  procedure  first runs the USESCAN
  11054.       program to scan the message base and create a  bag  file  containing
  11055.       the  messages.  Then it runs the Unix compress program, COMPRESS, to
  11056.       compress the  file  and  uses  the  EXPAND  command  to  create  two
  11057.       auxiliary  files.   Finally, it invokes UUCOPY to perform the actual
  11058.       sending.
  11059.  
  11060.  
  11061.  
  11062.  
  11063.  
  11064.  
  11065.                                    Chapter 19
  11066.  
  11067.                                 Fidonet Support
  11068.  
  11069.  
  11070.  
  11071.  
  11072.  
  11073.       19.1 Introduction
  11074.  
  11075.       Fidonet is a world wide network for  sending  private  messages  and
  11076.       distributed  group  discussion  areas.   The  network  is managed by
  11077.       bulletin board operators and sends messages directly between  boards
  11078.       using  modems.   Mailer  programs  like  Frontdoor can allow a modem
  11079.       line to be shared between fidonet traffic and BBS customers, or  you
  11080.       may prefer to dedicate a line to mail traffic.
  11081.  
  11082.       To  use  fidonet  with  your  board, you will need to acquire such a
  11083.       mailer program (we have tested Frontdoor and can recommend  it)  and
  11084.       the TSX-BBS Fidonet option.
  11085.  
  11086.       Two  types  of  mail  are  received  through  fidonet:  netmail  and
  11087.       echomail.  Netmail is for private messages sent  directly  from  one
  11088.       person  to  another while echomail supports public discussion areas.
  11089.       Incoming private netmail will be written  to  the  same  local  mail
  11090.       message  base  through which your users send messages to each other.
  11091.       Netmail messages are written to the TSX-BBS forum  system,  and  are
  11092.       made  available  under  the  forum  "grand  division" named fidonet.
  11093.       Note: Although netmail is referred to as "private", all  this  means
  11094.       is  that  the  messages  are  not  usually  posted on public message
  11095.       areas.  Sysops and other individuals at other boards may be able  to
  11096.       read your private messages.
  11097.  
  11098.       The  same  two  types  of outgoing mail can be sent into fidonet via
  11099.       TSX-BBS.  After you set up  a  fidonet  message  base,  sufficiently
  11100.       authorized  users  will  be able to send fidonet mail using the same
  11101.       methods they send messages to each other.  They will  simply  select
  11102.       fidonet  as  the route, give the fidonet address and the name of the
  11103.       message recipient, and use the editor to compose their message.
  11104.  
  11105.       Once you get the TSX-BBS fidonet option, you must set up  a  message
  11106.       base  which  will store outgoing fidonet mail and take the necessary
  11107.       steps to get the fidonet tosser and scanner  (which  are  components
  11108.       of  the  fidonet  option  package) running with your mailer program.
  11109.       The remainder of this section describes these steps in detail.
  11110.  
  11111.       We recommend that before you set up TSX-BBS  for  fidonet,  you  get
  11112.       your  mailer program working, contact your area fidonet coordinator,
  11113.       get a fidonet address, and determine  what  fidonet  address  should
  11114.       receive your outgoing echomail and netmail.
  11115.  
  11116.  
  11117.                                       193
  11118.  
  11119.       Chapter 19. Fidonet Support                                      194
  11120.  
  11121.  
  11122.       Note  that  if  you  want, you can set up TSX-BBS to receive fidonet
  11123.       traffic, but not send any out.  If you decide  that  you  only  want
  11124.       incoming  fidonet  mail,  you  can  skip  most of these steps except
  11125.       setting  up  the   fidonet   tosser   and   entering   the   fidonet
  11126.       configuration in SYSOP.
  11127.  
  11128.  
  11129.       19.2 Getting Fidonet Going
  11130.  
  11131.       To  get  your  TSX-BBS board sending and receiving Fidonet mail, you
  11132.       must take the following steps:
  11133.  
  11134.       1.  Order the Fidonet support option from S&H.   When  you  do,  you
  11135.           will  receive  an updated system key which activates the Fidonet
  11136.           option.  This key is entered into  the  LICENSE  program,  which
  11137.           you will run from the TSX command prompt.
  11138.  
  11139.       2.  Contact  your  local  Fidonet coordinator and join Fidonet.  You
  11140.           will receive a Fidonet address, as well as instructions  on  who
  11141.           your Echomail hub is.
  11142.  
  11143.       3.  Acquire and install a Fidonet mailer program such as Frontdoor.
  11144.  
  11145.       4.  Set  up  a  message  base  which  will  store  outgoing  Fidonet
  11146.           messages.
  11147.  
  11148.       5.  Specify your Fidonet configuration in the SYSOP program.
  11149.  
  11150.       6.  Schedule the Fidonet scanner for periodic execution.
  11151.  
  11152.       7.  Schedule the Fidonet tosser for periodic execution.
  11153.  
  11154.       8.  Customize the  batch  file  FIDOTOSS.CMD  so  that  the  Fidonet
  11155.           tosser will be able to locate your incoming mail packets.
  11156.  
  11157.  
  11158.       19.3 Seting up the fidonet message base
  11159.  
  11160.       The  Fidonet  message  base  must  be  created  if you want to allow
  11161.       outgoing Fidonet mail.  This includes netmail, which  is  sent  from
  11162.       the  Electronic  Mail system of TSX-BBS, as well as contributions to
  11163.       echomail forums, which are entered while your users browse forums.
  11164.  
  11165.       A  discussion  of  message  bases  is  found  on  page  112  in  the
  11166.       Electronic Mail chapter.
  11167.  
  11168.       Setting  up  the  message  base  for  fidonet mail is done using the
  11169.       SYSOP program.  To do this, begin by  selecting  "Mail  setup"  from
  11170.       the  main  menu,  and  "Message  bases" from the mail submenu.  This
  11171.       will place you in a data entry screen used to define message  bases.
  11172.       Each  message  base  is  defined  by  its  name,  a single character
  11173.       abbreviation, the  name  of  its  external  files,  a  message  area
  11174.       number, and an optional access expression.
  11175.  
  11176.       Chapter 19. Fidonet Support                                      195
  11177.  
  11178.  
  11179.       You  will  probably  want to enter "Fidonet" for the name.  The name
  11180.       you enter here is the  name  which  users  in  the  electronic  mail
  11181.       system  will  be  prompted  for  when  selecting  the  route  for an
  11182.       outgoing message.  The single letter ID which  you  specify  is  the
  11183.       letter  the  users type to select the route.  You will probably want
  11184.       to use "F" for Fidonet.  The area number for fidonet must be 3.
  11185.  
  11186.       Note that although you may be a member of several  separate  Fidonet
  11187.       networks,  you  only  need one message base.  The address your users
  11188.       specify in outgoing messages will determine which network  the  mail
  11189.       goes to.  This issue is resolved by your mailer, not by TSX-BBS.
  11190.  
  11191.       Any  message  base  can  be  associated  with  an access restriction
  11192.       expression  to  prevent  some  users  from  using  the  mail  route.
  11193.       However,  the  ability  to send fidonet mail is a built in privilege
  11194.       you specify for each BBS user, so you will probably decide to  leave
  11195.       the  access expression blank.  If you do specify an access privilege
  11196.       expression, the user must have  Fido  privilege  and  the  specified
  11197.       privilege in order to send Fido messages.
  11198.  
  11199.       The  first  time  that  an  outgoing  Fidonet message is queued by a
  11200.       user, the message base (two files such  as  FIDO.MLD  and  FIDO.MLC)
  11201.       will  be  created.   This  is the database which the Fidonet scanner
  11202.       will read and transfer messages to your mailer program.
  11203.  
  11204.  
  11205.       19.4 Specifying fidonet configuration
  11206.  
  11207.       After you fill in the information  for  the  fidonet  message  base,
  11208.       press  ESC  to  return to the SYSOP mail menu.  From this menu, type
  11209.       'F' to select the fidonet configuration  screen.   This  will  place
  11210.       you in a field entry screen similar to the one depicted below:
  11211.  
  11212.           +------------------- Fidonet Configuration --------------------+
  11213.           | Mail (.MSG) directory: c:\test\_____________________________ |
  11214.           | Files (.PKT) directory:c:\test\_____________________________ |
  11215.           | Rescan file:           c:\test\_____________________________ |
  11216.           | Mail clerk:            Dan Cappannari__________________      |
  11217.           |                                                              |
  11218.           |              Name            Your Address     Echomail Hub   |
  11219.           | --------------------------- ---------------- --------------- |
  11220.           | FIDONET____________________ 1:116/153_______ 1:116/202______ |
  11221.           | AKANET_____________________ 220:82/99_______ 220:82/12______ |
  11222.           | ___________________________ ________________ _______________ |
  11223.           | ___________________________ ________________ _______________ |
  11224.           | ___________________________ ________________ _______________ |
  11225.           | ___________________________ ________________ _______________ |
  11226.           +---------------- F1=Help, ESC=Save, F4=Abort -----------------+
  11227.  
  11228.       You  can read a help screen for each field by typing F1 while in the
  11229.       field.
  11230.  
  11231.       Two fields in the  Fidonet  configuration  screen  are  named  files
  11232.       directory  and  mail  directory.   These fields were designed around
  11233.       using the TSX-BBS Fidonet option with Frontdoor.  Specifically,  the
  11234.  
  11235.       Chapter 19. Fidonet Support                                      196
  11236.  
  11237.  
  11238.       tosser  looks for incoming packet files (files with the extension of
  11239.       .PKT) in the files directory,  and  incoming  message  files  (files
  11240.       with  the  extension  of  .MSG)  in  the  mail  directory.  Incoming
  11241.       attached files are assumed to reside in the files directory.
  11242.  
  11243.       A third field originally designed around  Frontdoor  is  the  rescan
  11244.       file.   To trigger your mailer program that new outgoing mail (which
  11245.       will consist of one .MSG file, placed in  the  mail  directory,  for
  11246.       each  outgoing message) has been queued, the date stamp on this file
  11247.       is updated.
  11248.  
  11249.       The mail clerk field specifies the  name  of  a  BBS  user  to  whom
  11250.       undeliverable  mail  should  be  sent.  If you leave this blank, any
  11251.       messages with an unknown recipient name will be disposed of.
  11252.  
  11253.       The remainder of the Fidonet  configuration  screen  allows  you  to
  11254.       specify  up  to  15  separate Fidonet networks that you are a member
  11255.       of.  To understand what this means,  consider  the  Fidonet  address
  11256.       1:116/154.   In this address, the value 1 before the colon indicates
  11257.       the zone, or major Fidonet network, to which node  116/154  belongs.
  11258.       The  first  few  "zones"  are  in fact divisions of the main Fidonet
  11259.       network by continent.  However, other values can be used to  specify
  11260.       separate  networks.   For  example,  zone 250 might be assigned to a
  11261.       network named AKANET.
  11262.  
  11263.       TSX-BBS uses the fields you specify for  each  Fidonet  network  for
  11264.       processing both incoming and outgoing messages.
  11265.  
  11266.       The  first  field  specifies  the  forum  grand division which is to
  11267.       store the messages.  The second field specifies  what  your  Fidonet
  11268.       address  is  within  this network (you do not need to enter the zone
  11269.       code).  The third field specifies the address  to  be  specified  as
  11270.       the source of outgoing messages.
  11271.  
  11272.  
  11273.       19.5 The Fidonet Scanner
  11274.  
  11275.       19.5.1 Introduction
  11276.  
  11277.       The  Fidonet  mail  scanner  is the program named FIDOSCAN.EXP.  The
  11278.       purpose of the Fidonet scanner  is  to  pick  up  outgoing  messages
  11279.       which  are  waiting  in  the  outgoing fidonet message base you have
  11280.       created, format them for transmission through Fidonet, and  transfer
  11281.       them  to  the mailer program (such as Frontdoor) which takes care of
  11282.       the actual communication.
  11283.  
  11284.       19.5.2 Scheduling the Fidonet Scanner
  11285.  
  11286.       You will want the FIDOSCAN to  run  periodically  so  that  outgoing
  11287.       messages  do  not wait too long before being passed into your mailer
  11288.       program.  You may want FIDOSCAN to run two or three times  per  day,
  11289.       or even every hour.
  11290.  
  11291.       To   arrange  for  FIDOSCAN  to  periodically  run,  use  the  event
  11292.       scheduler facility which is  built  into  the  SYSOP  program.   The
  11293.  
  11294.       Chapter 19. Fidonet Support                                      197
  11295.  
  11296.  
  11297.       event  scheduler  is discussed in Section 15.3, page 148.  Under the
  11298.       program field, specify "BBSBIN:FIDOSCAN.EXP".  The tag  you  specify
  11299.       for  the  Fidonet  scanner  should be FIDOSCAN.  This tag is used by
  11300.       the  mail  system  to  force  an  immediate  FIDOSCAN   run   if   a
  11301.       sufficiently privileged user sends a crash mail message.
  11302.  
  11303.       19.5.3 How FIDOSCAN works
  11304.  
  11305.       The FIDOSCAN program does the following things each time it runs:
  11306.  
  11307.       1.  It  opens the Fidonet message base and checks for messages which
  11308.           have not yet been sent.
  11309.  
  11310.       2.  Each message which has not been sent is formatted  as  a  ".MSG"
  11311.           file,  which  is  a  file  format  used  by  Fidonet mailers for
  11312.           transfer of messages.
  11313.  
  11314.       3.  After  formatting  all  messages,  the  date/time  stamp  on   a
  11315.           "rescan"  file  is  updated.   This provides the Fidonet scanner
  11316.           with a way of alerting the mailer program that it has  new  work
  11317.           to do.
  11318.  
  11319.       19.5.4 Fidoscan command options
  11320.  
  11321.       Normally  the  FIDOSCAN  program is automatically run by the TSX-BBS
  11322.       schedule manager.  Equivalently, you can  run  it  interactively  by
  11323.       simply typing "FIDOSCAN".
  11324.  
  11325.       The  FIDOSCAN  program  has two command qualifiers which can be used
  11326.       to alter its normal behavior to  deal  with  unusual  circumstances.
  11327.       The  first  of these two qualifiers is called /RESEND which could be
  11328.       specified as follows:
  11329.  
  11330.           FIDOSCAN/RESEND
  11331.  
  11332.       Resend mode is only necessary  if  your  mailer  program  failed  to
  11333.       properly  send  your  mail,  but  the ".MSG" files which the scanner
  11334.       provided to it have been deleted.   Specifically,  this  will  cause
  11335.       the  Fido  scanner  to  send  all messages in the Fido message base,
  11336.       regardless of whether they have been marked as sent or not.
  11337.  
  11338.       Note that if you do experience  some  difficulty  with  your  mailer
  11339.       program,  and  want  Fidoscan to regenerate all .MSG files, you will
  11340.       have to do this before the next scheduled mail sweeper run,  because
  11341.       the  mail  sweeper  will squeeze the Fido message base and eliminate
  11342.       the messages which have been sent.
  11343.  
  11344.       The second command qualifier to the FIDOSCAN program is /FLUSH:
  11345.  
  11346.           FIDOSCAN/FLUSH
  11347.  
  11348.       Flush mode can be handy when you are first setting up  Fidonet,  and
  11349.       have  entered sample outgoing Fidonet messages which you do not want
  11350.       to be actually  passed  in  to  your  mailer  program.   The  /FLUSH
  11351.       qualifier  causes  FIDOSCAN simply to mark all the outgoing messages
  11352.  
  11353.       Chapter 19. Fidonet Support                                      198
  11354.  
  11355.  
  11356.       in the Fido message base as sent, but not generate  any  .MSG  files
  11357.       for them.
  11358.  
  11359.  
  11360.       19.6 The Fidonet Tosser
  11361.  
  11362.       19.6.1 Introduction
  11363.  
  11364.       The  Fidonet  tosser,  FIDOTOSS.EXP, is the companion program to the
  11365.       Fidonet  scanner.   Whereas  the  scanner  program  sends   outgoing
  11366.       messages  into  your  mailer,  the  tosser  program  takes  incoming
  11367.       messages  from  your  mailer  and  delivers  them  to  the   TSX-BBS
  11368.       electronic  mail system (in the case of private netmail messages) or
  11369.       into the forum system (in the case of public echomail messages).
  11370.  
  11371.       Some mailer programs can be configured  to  automatically  invoke  a
  11372.       tosser  program  by  exiting  to  a  .BAT  file  with a special exit
  11373.       status.  You are welcome to use FIDOTOSS in this way.  Execution  of
  11374.       the  FIDOTOSS  program  is  discussed  below.   However, the Fidonet
  11375.       tosser is normally run as a  periodically  scheduled  utility  using
  11376.       the SYSOP event scheduler.
  11377.  
  11378.       19.6.2 Scheduling the Fidonet Tosser
  11379.  
  11380.       To  cause  the  schedule  manager  to  periodically  run the Fidonet
  11381.       tosser, you use the same SYSOP event schedule screen which  you  did
  11382.       for  the  Fidonet  scanner.   The  event  scheduler  is discussed in
  11383.       Section 15.3, page 148.  However, whereas  the  schedule  entry  for
  11384.       the   scanner   consists   simply   of  the  name  of  the  program,
  11385.       FIDOSCAN.EXP, the schedule for the tosser consists of the name of  a
  11386.       batch  file,  FIDOTOSS.CMD.   The reason for this is that a sequence
  11387.       of TSX commands, which are described  below,  must  be  executed  in
  11388.       order for the tosser to work properly.
  11389.  
  11390.       19.6.3 Customizing FIDOTOSS.CMD
  11391.  
  11392.       The  Fidonet  tosser  program  works  by  locating  incoming message
  11393.       (*.MSG) files in the "mail" directory and  incoming  packet  (*.PKT)
  11394.       files  in  the  "files"  directory (see page 195 for instructions on
  11395.       specifying the mail and files directories).
  11396.  
  11397.       However, to save transmission time, the files  actually  transferred
  11398.       between  mailers  may  be  compressed  using  programs  like  PKZIP.
  11399.       Therefore, the batch procedure for running the Fidonet  tosser  must
  11400.       first  contain  commands  to  "unzip"  these  files  before actually
  11401.       running the tosser.  An example command procedure is shown below:
  11402.  
  11403.       Chapter 19. Fidonet Support                                      199
  11404.  
  11405.  
  11406.           !
  11407.           ! Read incoming Fidonet mail from the mailer program
  11408.           !
  11409.           ! Locate zipped files
  11410.           !
  11411.           EXPAND/OPEN/OUT=TEMP.CMD C:\FD\FILES\00*.* -
  11412.           "PKUNZIP C:\FD\FILES\|F|E C:\FD\FILES\ -o|/DEL |A"
  11413.           !
  11414.           ! Unzip any zipped files
  11415.           !
  11416.           @temp
  11417.           !
  11418.           ! Read all incoming fidonet mail
  11419.           !
  11420.           RUN BBSBIN:FIDOTOSS
  11421.  
  11422.       In this procedure, the TSX EXPAND program runs first.   The  purpose
  11423.       of  the  EXPAND  program  is  to  locate  all  the  files matching a
  11424.       wildcard file specification and generate  a  batch  file  containing
  11425.       commands  to  be  executed  for each of the files.  In this example,
  11426.       EXPAND is instructed to locate files  whose  names  start  out  with
  11427.       "00"  (your  mailer  may  use  different  naming  conventions),  and
  11428.       generate a PKUNZIP command for  each  of  these  files.   The  first
  11429.       argument  to  the  EXPAND  command is the wildcard specification for
  11430.       the files to look for and the second argument describes the  command
  11431.       to  be  generated  for  each  matching  file.   The  command  string
  11432.       contains substitution operators (which begin with the  vertical  bar
  11433.       character  |) which are substituted with parts of the filename.  The
  11434.       "|F" expands to the filename, "|E" expands  to  the  extension,  and
  11435.       "|A"  expands to the full filename.  Again, the result of the EXPAND
  11436.       command is that a batch file (TEMP.CMD) is  generated  containing  a
  11437.       series  of PKUNZIP commands.  Additional information about EXPAND is
  11438.       available in the TSX documentation, or by typing  HELP  EXPAND  from
  11439.       the command prompt.
  11440.  
  11441.       Next  the Fidotoss batch file invokes the temporary batch file which
  11442.       was created by EXPAND.  This  temporary  batch  file  runs  PKUNZIP,
  11443.       which writes out the packet files needed by FIDOTOSS.
  11444.  
  11445.       Finally,  the  FIDOTOSS  program  itself  is  run,  which  reads and
  11446.       processes all the message and packet files.
  11447.  
  11448.       19.6.4 The FIDOTOSS command
  11449.  
  11450.       Normally the FIDOTOSS program is  run  by  simply  typing  FIDOTOSS.
  11451.       However,   command   qualifiers  can  be  used  to  specify  special
  11452.       processing options.  These qualifiers are:
  11453.  
  11454.       /ALL -- Normally FIDOTOSS compares the destination  Fidonet  address
  11455.           of  incoming  mail with the Fidonet address you specified in the
  11456.           SYSOP configuration screen.  Mail  which  is  not  addressed  to
  11457.           your  Fidonet  node  will  normally  not  be  delivered.   It is
  11458.           customary for mail to pass through your computer  which  is  not
  11459.           addressed  to  you  because your system may supply mail to other
  11460.           Fidonet nodes which are lower down  on  the  network  hierarchy.
  11461.  
  11462.       Chapter 19. Fidonet Support                                      200
  11463.  
  11464.  
  11465.           However,  if  you  want FIDOTOSS to deliver all mail, regardless
  11466.           of the destination Fidonet address, specify  /ALL.   This  might
  11467.           be  handy  if  you have copied a packet file from a friend's BBS
  11468.           and want to toss it into your board.
  11469.  
  11470.           You may  also  need  to  use  the  /ALL  qualifier  if  you  are
  11471.           receiving  Fidonet  packets  from  a satelite service, since the
  11472.           destination address of the packets may show as the service,  not
  11473.           your personal Fidonet address.
  11474.  
  11475.       /SAVE  -- Normally FIDOTOSS deletes incoming message file and packet
  11476.           files after it has tossed them.  Specify /SAVE if  you  want  to
  11477.           save these file.
  11478.  
  11479.       /NOADD  --  Normally  FIDOTOSS  creates  new  forums  as  needed for
  11480.           incoming echomail messages.   You  may  specify  /NOADD  on  the
  11481.           FIDOTOSS   command   line   to  suppress  this  automatic  forum
  11482.           creation.
  11483.  
  11484.       /DIR=dirname  --  Normally  FIDOTOSS  looks  for  packet  files  and
  11485.           message  files in the files and message directories specified in
  11486.           the SYSOP program.  However, if you have made a  temporary  copy
  11487.           of  a  packet  file  or  message  file  and  want to toss from a
  11488.           different location, specify the name of the  temporary  location
  11489.           wit /DIR, as in:
  11490.  
  11491.               FIDOTOSS/DIR=C:\MOTT\TEMP
  11492.  
  11493.       /CLERK  --  specifies  whether  FIDOTOSS  should  attempt to deliver
  11494.           netmail messages with unknown recipients to  the  "mail  clerk".
  11495.           The  name  of  a  mail  clerk, or sysop, can be specified in the
  11496.           SYSOP program.  If directed to do  so,  messages  FIDOTOSS  will
  11497.           send messages with unkown recipients to this person.
  11498.  
  11499.           The  default  setting  for  /CLERK  depends  on whether you have
  11500.           specified /ALL.  If you do not specify  /ALL,  FIDOTOSS  assumes
  11501.           that  you  know you are tossing packets designated just for your
  11502.           site, and delivers messages with unknown recipient names to  the
  11503.           mail  clerk  (if  specified).   However, if you do specify /ALL,
  11504.           FIDOTOSS  assumes  that  messages  to  unknown  recipients  were
  11505.           simply  destined for some other node, and behaves as if no clerk
  11506.           had been specified (dead letters are discarded).
  11507.  
  11508.           You  can  reverse  these  defaults  by  specifying   /CLERK   in
  11509.           conjunction  with  /ALL  to  deliver dead letters or /NOCLERK in
  11510.           the absence of /ALL to force FIDOTOSS to discard them.
  11511.  
  11512.  
  11513.       19.7 Using Frontdoor with TSX-BBS
  11514.  
  11515.       This chapter describes how  to  configure  TSX-BBS  to  support  the
  11516.       Frontdoor  mailer  program.  However, many of the comments made here
  11517.       will pertain to other mailer programs as well.
  11518.  
  11519.       Chapter 19. Fidonet Support                                      201
  11520.  
  11521.  
  11522.       TSX-BBS allows your mailer program to run in either  of  two  modes:
  11523.       "continuous  mailer"  or  "shared  line".  In continuous mailer mode
  11524.       the  mailer  program  is   permanently   connected   to   a   serial
  11525.       communications  line  and  the  line  is  dedicated  for  use by the
  11526.       mailer.  In shared line mode,  the  mailer  monitors  the  line  and
  11527.       displays  a message such as "Press ESC twice to load TSX-BBS" when a
  11528.       call comes in.  If a BBS user sees  this  message  and  presses  ESC
  11529.       twice,  the  mailer  releases  the  serial  line for use by TSX-BBS.
  11530.       Shared line mode makes it  possible  to  receive  calls  from  other
  11531.       mailer programs and from BBS users on the same line.
  11532.  
  11533.       There  are  some  important  differences  between  running  a mailer
  11534.       program on a TSX-BBS system and  running  the  same  mailer  on  DOS
  11535.       based  BBS  systems.   To  help explain them it is helpful to review
  11536.       how a mailer works under DOS.
  11537.  
  11538.       On a DOS based system, when a mailer program runs  it  has  complete
  11539.       control  of the computer.  It displays its output on the monitor and
  11540.       awaits message and BBS traffic on one or  more  COM  ports.   If  it
  11541.       receives  mail  traffic  it continues to run, performing sending and
  11542.       receiving functions.  When it receives a  call  from  a  BBS  caller
  11543.       rather  than another mailer, it can be configured to exit to DOS.  A
  11544.       batch file will execute the BBS, which will in turn exit and  return
  11545.       control to the mailer.
  11546.  
  11547.       Since  TSX-BBS  is  a  true  multi-user  (not  just  multi-line) BBS
  11548.       system, each incoming call runs a separate copy of the  BBS  program
  11549.       (TPR).   These  separate  copies  of TPR are not associated with any
  11550.       activity on the main system console at all.  Therefore it  does  not
  11551.       make  sense  for  a batch file running at the console to execute the
  11552.       BBS software on behalf of an incoming call.
  11553.  
  11554.       In fact, the sysop of a TSX-BBS system  will  want  to  reserve  the
  11555.       main  system  console  for  running  the  SYSOP program, viewing GIF
  11556.       files, or doing other work while users access the BBS.
  11557.  
  11558.       TSX-BBS does provide a technique for running mailer  programs  which
  11559.       is  consistent  with  the  method used under a single user DOS based
  11560.       system.  In fact,  the  mailer  program  will  believe  that  it  is
  11561.       running   on   the   console,  will  believe  that  it  is  directly
  11562.       programming the COM ports, and that it is running  out  of  a  batch
  11563.       file which can exit to the BBS and then rerun the mailer program.
  11564.  
  11565.       The  remainder  of this chapter explains how this technique works as
  11566.       it lists each step necessary to implement it.
  11567.  
  11568.       1.  Install and configure your mailer software.   For  Frontdoor,  a
  11569.           standard  installation  into  the  \FD\  directory  works  fine.
  11570.           Configure your mailer to use the COM1  port  on  your  computer,
  11571.           even  if  this  is  not  really  the  port to which the modem is
  11572.           attached.
  11573.  
  11574.       2.  Configure the mailer software  for  either  "continuous  mailer"
  11575.           mode  or  "shared  line"  mode.   In continuous mailer mode, the
  11576.  
  11577.       Chapter 19. Fidonet Support                                      202
  11578.  
  11579.  
  11580.           mailer will refuse to accept  a  call  from  anyone  other  than
  11581.           another mailer program.
  11582.  
  11583.       3.  Install  a  "virtual  terminal"  in  your TSX system.  A virtual
  11584.           terminal is like an imaginary workstation, with a virtual  video
  11585.           screen  for  program  output  and  a  virtual  keyboard for user
  11586.           input.  This virtual terminal will be used  to  run  the  mailer
  11587.           program  so that you can leave your real system console free for
  11588.           other tasks.  To do this, you must use the TSGEN  program.   You
  11589.           can  run  TSGEN  in interactive mode and follow the menus, which
  11590.           are explained in the TSX documentation, but the easiest  way  to
  11591.           do  this  is to edit your TSX32.GEN file and enter the following
  11592.           two lines at the end of it:
  11593.  
  11594.               !
  11595.               ! Virtual terminal to run our mailer program
  11596.               !
  11597.               DEVICE=TT/HANDDEF=LHSHTTV/CONTROLLER=G
  11598.                   UNIT=0/NAME="Mailer"/START/CMDFILE="SY:MAILER.CMD"
  11599.  
  11600.           After you save the changes, issue the command:
  11601.  
  11602.               TSGEN TSX32
  11603.  
  11604.           once you add these lines reboot  your  system.   Note  that  the
  11605.           UNIT   statement   specifies   that   a   command   file   named
  11606.           "SY:MAILER.CMD" is to be executed when the  line  starts.   Also
  11607.           note  the  "/START"  qualifier  that  causes the virtual line to
  11608.           begin execution each time the system is booted.  Once  you  make
  11609.           the  change,  run  TSGEN,  and reboot, the SHOW TERMINAL command
  11610.           will show the new virtual terminal with the device name TTG0.
  11611.  
  11612.       4.  Customize the MAILER.CMD file.  This is a batch  file  which  is
  11613.           associated  with  the  TTG0:  terminal  created  above.   It  is
  11614.           automatically  executed  with  the  system  boots  because   you
  11615.           specified  /START  on the UNIT statement for it.  The MAILER.CMD
  11616.           file is stored  in  your  TSX  system  directory  (\TSX32SYS  by
  11617.           default).   Two  customizations  must  be made to the MAILER.CMD
  11618.           file.  First, you will observe that it issues an ASSIGN  command
  11619.           to  associate  the  real  terminal  line  to which your modem is
  11620.           connected with the COM1 port, which your mailer will believe  it
  11621.           is actually using:
  11622.  
  11623.               !
  11624.               ! The following assign command tells FrontDoor which TSX
  11625.               ! line it is to use.  You should specify the name of the
  11626.               ! TSX line as the first parameter following "assign":
  11627.               !
  11628.               assign tte0: com1
  11629.  
  11630.           Replace  the  string  TTE0:  with TTB0: for the COM1 port, TTC0:
  11631.           for the COM2 port, or the appropriate terminal name for  a  port
  11632.           on a serial mux.
  11633.  
  11634.       Chapter 19. Fidonet Support                                      203
  11635.  
  11636.  
  11637.           The  only  other  change you need to make to MAILER.CMD is to be
  11638.           sure that the commands which  follow  the  assign  command  will
  11639.           actually run your mailer:
  11640.  
  11641.               !
  11642.               ! Run FD
  11643.               !
  11644.               cd d:\fd
  11645.               fd
  11646.  
  11647.           You  will  observe  that  the  command  procedure runs a program
  11648.           called MAILWAIT after the mailer exits.  It assumes that if  the
  11649.           mailer  exits,  it  will  do  so  due  to  an incoming human BBS
  11650.           caller.  The MAILWAIT command:
  11651.  
  11652.               MAILWAIT COM1:
  11653.  
  11654.           causes the job running on the virtual line to wait for  the  BBS
  11655.           user  to  log  off.  When this happens, the batch file goes back
  11656.           up to the section which reruns the mailer.
  11657.  
  11658.  
  11659.  
  11660.  
  11661.  
  11662.  
  11663.                                    Chapter 20
  11664.  
  11665.                                 Scheduled Events
  11666.  
  11667.  
  11668.  
  11669.  
  11670.       The multi-user, multi-tasking TSX platform which runs TSX-BBS  makes
  11671.       a  very  powerful  and flexible scheduling facility available to the
  11672.       bulletin  board.   This  chapter  explains   how   that   scheduling
  11673.       facility,  called the event scheduler, works.  We will then describe
  11674.       the events which need to be scheduled for regular BBS operation.
  11675.  
  11676.  
  11677.       20.1 The Schedule Server
  11678.  
  11679.       The multi user TSX platform is based  on  the  concept  of  multiple
  11680.       "jobs",  also referred to as "tasks" or "processes".  One example of
  11681.       a job is the sysop, sitting at the  console  terminal,  running  the
  11682.       SYSOP  program.   Attributes  of his job include the input keyboard,
  11683.       output video monitor, the files he has open, and the program  he  is
  11684.       running.   At the same time, several additional jobs could be logged
  11685.       in through modem lines running the  BBS  engine  or  door  programs.
  11686.       The  com  port attached to the modem is the timesharing line for the
  11687.       remote  BBS  user  in  exactly  the  same  way  that   the   console
  11688.       workstation is the timesharing line for the sysop.
  11689.  
  11690.       TSX  also allows "detached jobs".  A detached job is just like a job
  11691.       running on a timesharing line,  except  that  it  does  not  have  a
  11692.       physical  input  device  (there is no keyboard) or a physical output
  11693.       device (no COM port or console).
  11694.  
  11695.       Detached jobs can, however, accept input from  a  batch  file  (also
  11696.       called  a command procedure) instead of a keyboard.  This means that
  11697.       you can type a command into a batch file  to  run  a  program,  then
  11698.       follow  the  command  with  the user input which would normally come
  11699.       from the keyboard, and execute the program as a detached  job.   The
  11700.       program  itself  will  not  be  able  to distinguish whether a human
  11701.       being is typing  the  input  from  a  keyboard  or  whether  TSX  is
  11702.       providing the input keystrokes from the batch file.
  11703.  
  11704.       Just  as  detached jobs can feed input through command files instead
  11705.       of keyboards, detached jobs can write output  to  log  files  rather
  11706.       than a video monitor.
  11707.  
  11708.       When  a  TSX-BBS  system first boots, it executes a batch file named
  11709.       STARTBBS.CMD which begins execution of  a  detached  job  named  the
  11710.       schedule  server.   The purpose of the schedule server is to execute
  11711.       other detached jobs at scheduled times.  Since the  schedule  server
  11712.       is  always  waiting  to  start  jobs like a forum sweep or a fidonet
  11713.  
  11714.  
  11715.                                       204
  11716.  
  11717.       Chapter 20. Scheduled Events                                     205
  11718.  
  11719.  
  11720.       mail scan, the sysop never has to run these programs by  hand.   All
  11721.       the  sysop has to do is establish schedules for these regular events
  11722.       and then check in from time to time to be sure they are  running  as
  11723.       expected.   As  we  will see, the regularly scheduled programs which
  11724.       maintain your TSX-BBS system leave various log files  that  make  it
  11725.       convenient to see how they are performing.
  11726.  
  11727.       In  addition to regularly detaching jobs like the forum sweeper, the
  11728.       schedule server can be asked to invoke a particular task right  now.
  11729.       For  example,  if  a  sufficiently  privileged  user  sends  a crash
  11730.       Fidonet message, the BBS engine asks the schedule server  to  run  a
  11731.       Fidonet mail scan right now.
  11732.  
  11733.       Section  15.3  explains  how  to  use the SYSOP program to establish
  11734.       schedules.  It explains  that  scheduled  events  can  be  specified
  11735.       simply  as the name of a program to run, or the name of a batch file
  11736.       which can perform any sequence of programs and  commands  necessary.
  11737.       It  also explains that scheduled events can have tag names which are
  11738.       used to ask the schedule server to immediately invoke  a  particular
  11739.       event.   The  tag  names  provided  in  the  default  schedules with
  11740.       TSX-BBS are reserved and should not be modified.
  11741.  
  11742.       We will now briefly review each of the events  which  are  scheduled
  11743.       in the normal operation of a TSX-BBS system.
  11744.  
  11745.  
  11746.       20.2 The Mail Sweeper
  11747.  
  11748.       The  mail  sweeper squeezes message bases to recover unused space in
  11749.       them.  Its operation is described in Section 10.4.
  11750.  
  11751.       The mail sweeper does not have any  command  line  options,  so  the
  11752.       schedule  entry  for  it  simply  contains  the name of the program,
  11753.       MSWEEPER.EXP.
  11754.  
  11755.       The mail sweeper prints a summary of its operation when it  finishes
  11756.       which  is  written  to  its  log  file MSWEEPER.LOG.  Since the mail
  11757.       sweeper must lock records of the message base as it does  its  work,
  11758.       it  is  best to run it late at night when few users are likely to be
  11759.       on the board.
  11760.  
  11761.  
  11762.       20.3 The Forum Sweeper
  11763.  
  11764.       The forum sweeper (FSWEEP) performs various maintenance and  cleanup
  11765.       functions  related  to the forum system.  This includes expiring old
  11766.       messages and recovering the disk space, as  well  as  reconstructing
  11767.       control  files which are used when incoming messages are tossed into
  11768.       the forum system.
  11769.  
  11770.       The forum sweeper has a variety of command line  options  which  can
  11771.       be  used  to  customize  its behavior, and is therefore run out of a
  11772.       batch file named BBS:FSWEEP.CMD.
  11773.  
  11774.       Chapter 20. Scheduled Events                                     206
  11775.  
  11776.  
  11777.       A full description of the forum sweeper is  found  in  Section  9.4.
  11778.       If  no  arguments are specified to the sweeper its default behaviour
  11779.       is to process only those forums which have had new  messages  added.
  11780.       It  does  not  enforce  any  maximums and the expiration is set to 7
  11781.       days.
  11782.  
  11783.  
  11784.       20.4 The Fidonet Tosser
  11785.  
  11786.       The Fidonet Tosser reads incoming Fidonet mail  from  message  files
  11787.       and  packet files, locates mail for your Fidonet site, and tosses it
  11788.       into the mail system and forum system.
  11789.  
  11790.       The default schedule for TSX-BBS  does  include  an  entry  for  the
  11791.       Fidonet  tosser,  but  there  are  no times marked for its execution
  11792.       since the Fidonet support is an extra cost option.   Also,  you  may
  11793.       prefer  to  have  your  mailer program invoke the tosser immediately
  11794.       after mail is  received  rather  than  scheduling  it  for  periodic
  11795.       execution.
  11796.  
  11797.       The  Fidonet tosser is described in Section 19.6.  As explained, the
  11798.       schedule entry for the  tosser  will  show  the  command  procedure,
  11799.       BBS:FIDOTOSS.CMD, which runs it.
  11800.  
  11801.  
  11802.       20.5 The Fidonet Scanner
  11803.  
  11804.       The  Fidonet  scanner  scans  the  Fidonet outgoing message base and
  11805.       packages up messages to be sent out by your mailer program.   Again,
  11806.       since  Fidonet  is  an extra cost option, the scanner is included in
  11807.       the default schedule for TSX-BBS but not set to run at any time.
  11808.  
  11809.       The Fidonet scanner is described  in  Section  19.5.   Although  the
  11810.       FIDOSCAN  program  has  command  options  to customize what it does,
  11811.       they are only used  interactively  by  the  sysop  in  very  unusual
  11812.       circumstances,  so the schedule entry for the Fidonet scanner simply
  11813.       has the name of the program, BBSBIN:FIDOSCAN.EXP.
  11814.  
  11815.       When you schedule the  scanner  for  periodic  execution,  you  will
  11816.       probably  want  to  specify a log file name such as BBS:FIDOSCAN.LOG
  11817.       so that you can check  the  log  file  to  be  sure  it  is  running
  11818.       correctly.
  11819.  
  11820.  
  11821.       20.6 The Bag File Tosser
  11822.  
  11823.       The  Usenet  tosser  is described in 18.6.  It processes files which
  11824.       contain sets of usenet messages.  The format of  these  messages  is
  11825.       defined in 18.3.
  11826.  
  11827.       It  accepts a single argument, the names of the files containing the
  11828.       messages.  By default it will  delete  the  files  after  processing
  11829.       them.
  11830.  
  11831.       Chapter 20. Scheduled Events                                     207
  11832.  
  11833.  
  11834.       The  schedule  entry for the tosser will show the command procedure,
  11835.       BBS:BAGTOSS.CMD, which  runs  it.   This  file  must  be  edited  to
  11836.       specify the location of the bag files to process.
  11837.  
  11838.  
  11839.       20.7 The Log File Sweeper
  11840.  
  11841.       Various  components  of  TSX-BBS  create  log files in the directory
  11842.       defined by the "BBS:" logical name.  Many of  these  log  files  are
  11843.       written  to  by  the  mail  and  forum  tosser, scanner, and sweeper
  11844.       programs.  These log files are not like the normal log  files  which
  11845.       TSX  makes  to  store  program  output  from  detached jobs.  Normal
  11846.       program output log files are recreated each time a  scheduled  event
  11847.       runs,  so  the  only  record  you  have  on  disk of events like the
  11848.       Fidonet scanner is the  record  from  the  last  time  it  ran.   To
  11849.       provide  a  historical  record  of recent activities such as posting
  11850.       messages in forums, programs like the Fidonet  tosser  and  the  bag
  11851.       file  tosser  open  these  special  log files in append mode and add
  11852.       records at the end of them  showing  what  they  are  doing.   These
  11853.       special  log  file  records  are  all  time stamped showing when the
  11854.       activity occurred.  For example, records  in  the  forum  statistics
  11855.       log file FSTAT.LOG might look like:
  11856.  
  11857.           09/14/94 16:20  ***** TOSSER starting run
  11858.           09/14/94 16:20  Pre-Processing file \TSXBBS\FORUM\B\TEST.BAG
  11859.           09/14/94 16:20  Summary of messages added to usenet
  11860.           09/14/94 16:20    Messages added = 1
  11861.           09/14/94 16:20    Bytes added = 36
  11862.           09/14/94 16:20    Duplicates rejected = 0
  11863.           09/14/94 16:20    Messages rejected due to name restrictions = 0
  11864.           09/14/94 16:20    Forums created = 1
  11865.           09/14/94 16:20  ***** TOSSER ended run
  11866.  
  11867.       To  prevent these archival log files from growing forever, consuming
  11868.       all the free space on your hard  disk,  a  regularly  scheduled  log
  11869.       file  sweeper  runs to eliminate messages which are too old to be of
  11870.       interest.  The  name  of  this  program  is  LOGSWEEP.EXP,  and  the
  11871.       default  schedule for TSX-BBS runs the log file sweeper very late in
  11872.       the morning after all the mail tossers and  scanners  have  run  and
  11873.       added their records to the archival log files.
  11874.  
  11875.       The  sysop  controls  how old a log file message must be in order to
  11876.       be considered too old to be of interest.  This  parameter  is  found
  11877.       in the BBS logging options screen of the SYSOP program.
  11878.  
  11879.  
  11880.  
  11881.  
  11882.  
  11883.  
  11884.                                    Chapter 21
  11885.  
  11886.                             For Further Information
  11887.  
  11888.  
  11889.  
  11890.  
  11891.       S&H  Computer  Systems  has  been  in  the  business  of  developing
  11892.       multi-user  solutions  since  1975.   With  over  20,000   satisfied
  11893.       customers  you  can  rest  assured  that  we  have the expertise and
  11894.       experience to produce the finest quality  systems  software  in  the
  11895.       world.
  11896.  
  11897.       We  have  a staff of knowledgeable support technicians who are ready
  11898.       and able to help you install TSX-BBS and answer any  questions  once
  11899.       you  are  up  and  running.  Many of our customers have told us that
  11900.       our software support is  the  finest  they  have  ever  used.   And,
  11901.       unlike  many  other  software companies, our top developers maintain
  11902.       frequent contact with our customers, listening  to  their  ideas  of
  11903.       how our products can be improved.
  11904.  
  11905.       For  assistance in ordering a demonstration or production system, or
  11906.       for  further  technical   information,   contact   the   S&H   sales
  11907.       depart-ment.
  11908.  
  11909.       The  latest copies of the shareware versions of TSX-BBS and TSX-Lite
  11910.       can be downloaded from the S&H Support BBS: 615-320-1820.
  11911.  
  11912.           S&H Computer Systems, Inc.
  11913.           1027 17th Avenue South
  11914.           Nashville, TN  37212  USA
  11915.           Voice: 615-327-3670
  11916.           BBS: 615-320-1820
  11917.           FAX: 615-321-5929
  11918.           CompuServe: 71333,27
  11919.           Internet: 71333.27@compuserve.com
  11920.  
  11921.       The  S&H  logo,  TSX-BBS,  TSX-32,   TSX-Net,   TSX-Term,   Edit-32,
  11922.       MessageNet  &  Advanced  MessageNet,  are trademarks of S&H Computer
  11923.       Systems,  Inc.   Other  product  names  are  trademarks   of   their
  11924.       respective owners.
  11925.  
  11926.       S&H   Computer   Systems,  Inc.   makes  no  contractual  obligation
  11927.       regarding this product, either expressed or  implied,  and  reserves
  11928.       the right to modify this product and add or remove features.
  11929.  
  11930.       Copyright  (c)  1994  S&H Computer Systems, Inc., Nashville, TN, USA
  11931.       ALL RIGHTS RESERVED
  11932.  
  11933.  
  11934.  
  11935.  
  11936.                                       208
  11937.  
  11938.       Index                                                            209
  11939.  
  11940.  
  11941.       Access privilege, 75                Color operators, 21
  11942.       actname menu action, 43             COLOR substitution, 24
  11943.       Adult file areas, 78                COLOR substitution operator,
  11944.       ANSI capability substitution,                22
  11945.                28                         Conditional expressions, 31
  11946.       ANSI editor substitution, 28        Continuous mailer mode, 201
  11947.       ANSI terminals, 11                  Copyright, 208
  11948.       Autoadd forum attribute, 101        Crash mail, 150, 196
  11949.       Autobaud setting, 12                DAILY.MSG file, 63
  11950.       autologoff action, 43               Data terminal ready, 14
  11951.       Bag File Tosser, 206                DATE substitution, 25
  11952.       Bag files, compressed, 188          DATEFORMAT substitution, 25
  11953.       Bag files, format, 185              datesearch menu action, 45,
  11954.       Bag files, tossing, 189                      80
  11955.       BAGTOSS, 184                        DCE, 13
  11956.       BAGTOSS.EXP program, 206            DEC terminals, 11
  11957.       BASIC user class, 62, 145           DELAY substitution, 26
  11958.       Baud rate setting, 11               Deleting files, 77
  11959.       BAUDRATE substitution, 24           Demonstration version, 9
  11960.       BBS logical device name, 16         Detached jobs, 204
  11961.       BBS substitution, 24                DIAL callback command, 66
  11962.       BBS:FTREE.DAT file, 104             DIRTOFDL program, 84
  11963.       BBSASN.CMD file, 16                 dirupload menu action, 45
  11964.       BBSBIN logical device name,         Discussion forums, 5
  11965.                16                            see Forums, 89
  11966.       BBSCD program, 185                  dispfile menu action, 45
  11967.       bbsexit menu action, 44             display menu action, 46, 57
  11968.       BEEP substitution, 24               $display menu command, 39
  11969.       BlueWave reader, 173                DLAVAIL substitution, 26
  11970.       BNU fossil driver, 135              DLDAYLIMIT substitution, 26
  11971.       BOARDHS parameter, 12               DNLOADCNT substitution, 26
  11972.       brfile menu action, 44              DNLOADSIZE substitution, 26
  11973.       Built-in privileges, 32             DOBBS sysgen option, 10
  11974.       Callback verification, 63           door menu action, 46, 136
  11975.       CALLBACK.DAT file, 65               Door programs, 133
  11976.       Carrier detect signal, 14           DOOR.SYS file, 46, 135
  11977.       Categories of files, 73             DOS directories, 73
  11978.       CD ROM drives, 76                   DOTSXTERM sysgen option, 10
  11979.       CENSOR.DAT file, 117                download menu action, 47
  11980.       Censoring messages, 117             Download privilege, 75
  11981.       Chat, 7, 127                        Downloading QWK packets, 57,
  11982.       CHAT.LOG file, 131                           180
  11983.          handles, 127                     Drop file logon, 68
  11984.          scrolling, 128                   Drop files, 135
  11985.       chathandle menu action, 44          DROPIN procedure, 68
  11986.       chatjoin menu action, 44            DTE, 13
  11987.       chatmake menu action, 44            DTESPEED substitution, 26
  11988.       chatuser menu action, 44            DTR signal, 14
  11989.       CHSERVER.EXP program, 131           E-mail, 112
  11990.       CLASS substitution, 24              Echomail, 193
  11991.       Classes for user, 145               EOL substitution, 26, 36
  11992.       Classified Ads, 109                 ESC key menu action, 41
  11993.       CLREOL substitution, 24             EXCLUDE callback command, 67
  11994.       CLS substitution, 24                exit menu action, 47
  11995.       Color capability, 28                EXPAND command, 199
  11996.  
  11997.       Index                                                            210
  11998.  
  11999.  
  12000.       EXPDATE substitution, 26                  103
  12001.       Expiration of messages, 91             log files, 105
  12002.       EXPIRED user class, 63, 145            message cleanup, 90
  12003.       FAL files, 73                          names, 96
  12004.       fallist menu action, 47, 80            previewing new, 102
  12005.       falsearch menu action, 47, 81          user access files, 103
  12006.       FBATCH event log, 109                  VFILEx.DAT files, 104
  12007.       FDL files, 72                       FOSSIL driver, 135
  12008.       fdllist menu action, 48, 81         Free downloads, 76, 77
  12009.       fdlsearch menu action, 48, 81       FREJECT.LOG file, 108
  12010.       fdlupload menu action, 48, 82       frmalist menu action, 49
  12011.       FERROR.LOG file, 109                frmdownload menu action, 50
  12012.       Fido, 5                             frmenter menu action, 50
  12013.       Fidonet, 193                        frmentname menu action, 52
  12014.       Fidonet scanner, 196, 206           frmentnum menu action, 52
  12015.       Fidonet Tosser, 198, 206            frmgetlist menu action, 51
  12016.       FIDOSCAN, 196                       frmprefix menu action, 52
  12017.       FIDOSCAN program, 206               frmqwkman menu action, 52,
  12018.       FIDOTOSS, 198                                180
  12019.       FIDOTOSS.CMD, 198                   frmslist menu action, 51
  12020.       FIDOTOSS.CMD file, 206              Frontdoor mailer, 193, 194,
  12021.       File Area Lists (FAL), 73                    195, 196, 200
  12022.       File categories, 73                 FSTAT.LOG file, 108
  12023.       File Description Lists (FDL),       FSUMMARY.LOG file, 105
  12024.                72                         FSWEEP program, 92
  12025.       File library, 71                    FSWEEP.CMD file, 205
  12026.       File sets, 72                       FSWEEP.LOG file, 106
  12027.       File transfer protocol, 49          FTP, 6, 121
  12028.       Filing cabinet, 115                 FTP program, 52
  12029.       FIRST substitution, 27              FTREE.DAT file, 104
  12030.       FIXEDSPEED line option, 12          GETSAT, 184, 187
  12031.       Flow control, 12, 14                GIGET substitution, 27
  12032.       fmpmenu menu action, 49             Grand division, 97
  12033.       FMPNAME substitution, 27            GRGET substitution, 27
  12034.       fmpset menu action, 49              GROUP substitution, 27
  12035.       FNEW.LOG file, 108                  GSGET substitution, 27
  12036.       Forum Sweeper, 205                  GZIP, 185, 188
  12037.       forumcheck menu action, 49          Handle control, 155
  12038.       FORUMNAME substitution, 27          HANDLE substitution, 27
  12039.       Forums, 89                          Handles for chat, 127
  12040.          access privileges, 99            Handshaking setting, 12
  12041.          batch addition, 90               Hardware flow control, 14
  12042.          control files, 103               $hot menu command, 39
  12043.          creation, 100                    IBM character substitution,
  12044.          event log, 105                            28
  12045.          FBATCH event log, 109            IDLETIME parameter, 138
  12046.          FERROR.LOG, 109                  $initial menu item, 61
  12047.          FNEW.LOG file, 108               Installing TSX-BBS, 9
  12048.          FREJECT.LOG file, 108            Internet access, 6, 120
  12049.          FSTAT.LOG file, 108              Internet mail, 123
  12050.          FSUMMARY.LOG file, 105           Introduction, 1
  12051.          FSWEEP.LOG file, 106             LAST substitution, 27
  12052.          FTREE.DAT file, 104              LASTCALL substitution, 27
  12053.          grand division, 97               LD callback command, 67
  12054.          inheritance of privileges,       LDDIAL callback command, 66
  12055.  
  12056.       Index                                                            211
  12057.  
  12058.  
  12059.       Library of files, 71                pagesysop menu action, 56
  12060.       LOCAL callback command, 66          Paging the sysop, 56, 154
  12061.       Local logon, 20                     Parity setting, 12
  12062.       Local mail, 112                     Password for lines, 12
  12063.       Log file sweeper, 207               PAUSE substitution, 28
  12064.       logoff menu action, 53              PC-Term terminals, 11
  12065.       Logon procedure, 62                 PCBoard file conversion, 83
  12066.       LOGSWEEP.EXP program, 207           PCBTOFDL program, 83
  12067.       logwrite menu action, 53            Personal file workspace, 57,
  12068.       LPP substitution, 27                         85
  12069.       Mail, 112                           Personal workspace, 28, 88
  12070.       Mail Sweeper, 113, 114, 205         Phone setting, 12
  12071.          Internet, 123                    PHRASE substitution, 28
  12072.       mailabook menu action, 53           PMAN command, 138
  12073.       mailbrowse menu action, 53          POS substitution, 28
  12074.       mailcheck menu action, 53           print menu action, 57
  12075.       Mailer programs, 200                Privileges
  12076.       mailfile menu action, 54               built-in, 32
  12077.       mailrecv menu action, 54               sysop-defined, 33
  12078.       mailsend menu action, 54            PRIVLEV substitution, 28
  12079.       mailsyn menu action, 54             $prompt menu command, 39
  12080.       mailsysop menu action, 55           pws action, 57
  12081.       MAILWAIT program, 203               PWS substitution, 28, 88
  12082.       MASTER.FAL file, 73                 PWSAVAIL substitution, 28, 88
  12083.       menu menu action, 55                PWSDIR substitution, 28, 88
  12084.       menujump action, 55                 PWSSIZE substitution, 28, 88
  12085.       menujump menu action, 55            QMAIL, 177
  12086.       MENUTITLE substitution, 27          QSO, 177
  12087.       Message notification, 27            QWK menu actions, 52, 57, 58,
  12088.       Modem baud rates, 13                         180
  12089.       Modem reset string, 12              QWK services, 173
  12090.       Modem result codes, 14              QWKBBSTIME substitution, 28
  12091.       Modem setup, 13                     QWKBULLETINS substitution, 28
  12092.       MRESET parameter, 12                qwkcfg menu action, 57, 180
  12093.       MSGNOTIFY substitution, 27          QWKDLEMPTY substitution, 29
  12094.       MSWEEPER.EXP program, 205           QWKDLLOGOFF substitution, 29
  12095.       MSWEEPER.LOG file, 205              QWKDLOFF substitution, 29
  12096.       $name menu command, 39              QWKDLREPLIES substitution, 29
  12097.       namesel menu action, 56             QWKDLWELCOME substitution, 29
  12098.       Netmail, 193                        qwkdownload menu action, 57,
  12099.       Networking, 6                                180
  12100.       NEWS.MSG file, 63                   QWKINCEMAIL substitution, 29
  12101.       Newsgroups, 5, 184                  QWKINCFILES substitution, 29
  12102.       NEWTEMPFILES sysgen option,         QWKLOGOFF substitution, 29
  12103.                10                         QWKMFS substitution, 29
  12104.       NODE substitution, 27, 136          QWKMMA substitution, 29
  12105.       offcheck menu action, 56            QWKMMP substitution, 29
  12106.       Offline message readers, 173        QWKNEWFILES substitution, 29
  12107.       offquiet menu action, 56            QWKNEWS substitution, 29
  12108.       OPANSI substitution, 28             QWKNODLPRMPT substitution, 29
  12109.       OPANSIEDIT substitution, 28         QWKNONDX substitution, 29
  12110.       OPCOLOR substitution, 28            qwkread menu action, 58
  12111.       OPIBMCHAR substitution, 28          qwkservices menu action, 58
  12112.       ORINGSIZE parameter, 12             QWKULOFF substitution, 29
  12113.       Pagesat, 187                        qwkupload menu action, 58
  12114.  
  12115.       Index                                                            212
  12116.  
  12117.  
  12118.       QWKWELCOME substitution, 29         TEMPDIR substitution, 30, 136
  12119.       REGISTER.MSG file, 63               Terminal type setting, 11
  12120.       REGISTERED user class, 145          TIME substitution, 30
  12121.       Restricted file areas, 78           TIMELEFT substitution, 30
  12122.       Result codes, 14                    TIMELIMIT substitution, 30
  12123.       return menu action, 58              TIO records, 72
  12124.       RMAIL messages, 184                 top menu action, 59
  12125.       RNEWS message, 184                  TOTALCALLS substitution, 30
  12126.       ROM drives, 76                      TOTALTIME substitution, 30
  12127.       RTS/CTS flow control, 12            tpr menu action, 59
  12128.       RTS/CTS handshaking, 14             TSX-32 sysgen, 9
  12129.       Satelite data, 187                  TSX-Lite, 9
  12130.       SCHEDULE.CTL file, 148              tsxcmd menu action, 60
  12131.       Scheduled events, 204               TSXDROP.DAT file, 68
  12132.       Scheduler program, 148              UAF.BBS file, 142
  12133.       Scrolling regions, 128              upload menu action, 60
  12134.       Search expressions, 82              Upload privilege, 76
  12135.       Searching                           UPLOADCNT substitution, 30
  12136.          by dates, 45, 80                 Uploading files, 45, 48, 82
  12137.          file descriptions, 47, 48,       UPLOADSIZE substitution, 30
  12138.             81                            Usenet, 5, 184
  12139.       Serial line parameters, 10          Usenet message format, 185
  12140.       setclass menu action, 58            User authorization, 142
  12141.       Shared line mode, 201               User classes, 145
  12142.       Shareware version, 9                User handles, 127
  12143.       SLIP connections, 7                 USER substitution, 30
  12144.       SMTP, 123                           USERID substitution, 30
  12145.       Speed setting, 11                   Userlog, 142
  12146.       STARTBBS.CMD file, 10, 204          useroptions menu action, 61
  12147.       STRIP callback command, 65          USESCAN, 185
  12148.       Substitution operators, 24          UUCICO, 185, 190, 191
  12149.       Sweeper options, 93                 UUCOPY, 190
  12150.       Sweeper scheduling, 96              UUCP protocol, 184
  12151.       SYSBBS.CMD file, 20                 Verbal result codes, 14
  12152.       SYSGEN, 9                           VERIFIED user class, 64, 145
  12153.       Sysop paging, 56                    vote menu action, 61
  12154.       Sysop paging control, 154           VT100 terminals, 11
  12155.       Sysop-defined privileges, 33        Waffle, 190
  12156.       SYSOP1 substitution, 29             WELCOME.MSG file, 62
  12157.       SYSOP2 substitution, 29             Word censoring, 117
  12158.       SYSOP3 substitution, 30             Workspace, 57, 85
  12159.       SYSPASSWORD sysgen parameter,       X00 fossil driver, 135
  12160.                12                         XON/XOFF flow control, 12
  12161.       System password, 12                 ZMODEM sysgen option, 10
  12162.       System variables., 33
  12163.       TAGCOUNT substitution, 30
  12164.       tagdl menu action, 59, 82
  12165.       tagedit menu action, 59, 82
  12166.       TAGSIZE substitution, 30
  12167.       TAGTIME substitution, 30
  12168.       Taming door programs, 138
  12169.       TBBS file conversion, 84
  12170.       TCP/IP networking, 6
  12171.       Telnet, 6, 35, 123
  12172.       Telnet program, 59
  12173.